Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了swift – 如果一个类实现了一个声明一个的协议,为什么一个类不能提供一个可用的初始化器?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图理解以下,做作的例子:

protocol MyProtocol {
  init?(String: String)
}

class MyObject: MyProtocol {
  let s: String
  @L_675_0@ init(String: String) {
    self.s = String
  }
}

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

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。