프로토콜이 있다고 가정 해 봅시다.
public protocol Printable {
typealias T
func Print(val:T)
}
그리고 여기에 구현이 있습니다.
class Printer<T> : Printable {
func Print(val: T) {
println(val)
}
}
내 기대는 Printable
변수를 사용 하여 다음과 같은 값을 인쇄 할 수 있어야한다는 것입니다 .
let p:Printable = Printer<Int>()
p.Print(67)
컴파일러가 다음 오류로 불평합니다.
"프로토콜 '인쇄 가능'은 자체 또는 관련 유형 요구 사항이 있기 때문에 일반 제약 조건으로 만 사용할 수 있습니다."
내가 뭘 잘못하고 있니? 어쨌든 이것을 고치려면?
**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)
편집 2 : 내가 원하는 실제 사례. 이것은 컴파일되지 않지만 내가 원하는 것을 나타냅니다.
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()
}