Giả sử tôi có một giao thức:
public protocol Printable {
typealias T
func Print(val:T)
}
Và đây là cách thực hiện
class Printer<T> : Printable {
func Print(val: T) {
println(val)
}
}
Kỳ vọng của tôi là tôi phải có thể sử dụng Printable
biến để in các giá trị như sau:
let p:Printable = Printer<Int>()
p.Print(67)
Trình biên dịch đang phàn nàn với lỗi này:
"Giao thức 'Có thể in' chỉ có thể được sử dụng như một ràng buộc chung vì nó có các yêu cầu về loại riêng hoặc được liên kết"
Tôi có làm điều gì sai ? Dù sao để sửa chữa điều này?
**EDIT :** Adding similar code that works in C#
public interface IPrintable<T>
{
void Print(T val);
}
public class Printer<T> : IPrintable<T>
{
public void Print(T val)
{
Console.WriteLine(val);
}
}
//.... inside Main
.....
IPrintable<int> p = new Printer<int>();
p.Print(67)
CHỈNH SỬA 2: Ví dụ thực tế về những gì tôi muốn. Lưu ý rằng điều này sẽ không biên dịch, nhưng trình bày những gì tôi muốn đạt được.
protocol Printable
{
func Print()
}
protocol CollectionType<T where T:Printable> : SequenceType
{
.....
/// here goes implementation
.....
}
public class Collection<T where T:Printable> : CollectionType<T>
{
......
}
let col:CollectionType<Int> = SomeFunctiionThatReturnsIntCollection()
for item in col {
item.Print()
}