मान लीजिए कि मेरे पास एक प्रोटोकॉल है:
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)
EDIT 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()
}