swift – 如果一个类实现了一个声明一个的协议,为什么一个类不能
发布时间:2020-12-14 04:42:34 所属栏目:百科 来源:网络整理
导读:我试图理解以下,做作的例子: 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 in
我试图理解以下,做作的例子:
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)? 解决方法
这与编译的原因相同:
class A { init?(s:String) {} init() {} } class B : A { override init(s:String) {super.init()} } init可以覆盖(即替换)init?. 另见docs(当某些内容被清楚地记录下来时,问“为什么”似乎很愚蠢;这只是关于语言的一个事实):
(正如在关于问题和答案的评论中指出的那样,如果你想到一个永远不会失败的init和一个具有相同签名的init之间的差异,这就完全有道理 – 也就是说,没有有效的区别.换句话说:你可以告诉我,我可能会失败,但你不能告诉我,我必须失败.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |