ধরা যাক আমার কাছে একটি প্রোটোকল রয়েছে:
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()
}