swift – 如果一个类实现了一个声明一个的协议,为什么一个类不能提供一个可用的初始化器?

swift – 如果一个类实现了一个声明一个的协议,为什么一个类不能提供一个可用的初始化器?,第1张

概述我试图理解以下,做作的例子: protocol MyProtocol { init?(string: String)}class MyObject: MyProtocol { let s: String required init(string: String) { self.s = string }}let o = MyObject(string: "test 我试图理解以下,做作的例子:

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(当某些内容被清楚地记录下来时,问“为什么”似乎很愚蠢;这只是关于语言的一个事实):

A failable initializer requirement can be satisfIEd by a failable or nonfailable initializer on a conforming type.

(正如在关于问题和答案的评论中指出的那样,如果你想到一个永远不会失败的init和一个具有相同签名的init之间的差异,这就完全有道理 – 也就是说,没有有效的区别.换句话说:你可以告诉我,我可能会失败,但你不能告诉我,我必须失败.)

总结

以上是内存溢出为你收集整理的swift – 如果一个类实现了一个声明一个的协议,为什么一个类不能提供一个可用的初始化器?全部内容,希望文章能够帮你解决swift – 如果一个类实现了一个声明一个的协议,为什么一个类不能提供一个可用的初始化器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1007235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存