मैं, निम्नलिखित, काल्पनिक को समझने के लिए कोशिश कर रहा हूँ उदाहरण:किसी वर्ग को एक अनुपलब्ध inititalizer क्यों प्रदान नहीं करना है यदि यह एक प्रोटोकॉल लागू करता है जो एक घोषित करता है?
protocol MyProtocol {
init?(string: String)
}
class MyObject: MyProtocol {
let s: String
required init(string: String) {
self.s = string
}
}
let o = MyObject(string: "test")
print(o.s)
MyProtocol
वाणी एक failable initializer। MyObject
MyProtocol
के अनुरूप है और उदाहरण कोड संकलित और बिना किसी समस्या के निष्पादित करता है।
मेरा प्रश्न है: क्यों नहीं है MyObject
(के रूप में प्रति MyProtocol
) एक failable प्रारंभकर्ता प्रदान करने के लिए है? (अर्थात लिए प्रतिस्थापित किया जा) init?
class A {
init?(s:String) {}
init() {}
}
class B : A {
override init(s:String) {super.init()}
}
init
ओवरराइड कर सकते हैं:
अविश्वसनीय initialiser अभी भी एक initialiser कि एक रिटर्न है। आदर्श मामले में 'मायऑब्जेक्ट'। यह एक ही हस्ताक्षर के असफल असफल प्रारंभकर्ता द्वारा trumped है। कोड को संकलित करने के लिए आपको अभी भी उसी हस्ताक्षर के साथ प्रारंभकर्ता प्रदान करना होगा। मुझे लगता है कि यह एक प्रारंभिक प्रारंभिक है जो असफल नहीं हो सकता है। एक तरीके से। – Fogmeister
शायद क्योंकि विकल्प वैकल्पिक हैं? हाहा लेकिन एक गंभीर टिप्पणी पर एक अंतर्निहित वस्तु जो हमेशा 'कुछ' आपके प्रोटोकॉल को संतुष्ट करेगी। – NSGangster