swift – 覆盖一个计算属性,该属性返回一个Optional值,返回一个非Optional值

swift – 覆盖一个计算属性,该属性返回一个Optional值,返回一个非Optional值,第1张

概述以下编译和运行在运行 Swift 4的Xcode 9.2上没有问题: class ParentWithComputedOptional { var computedOptional: Int? { return nil }}class ChildThatUnwraps: ParentWithComputedOptional { override var computedOpt 以下编译和运行在运行 Swift 4的Xcode 9.2上没有问题:

class ParentWithComputedOptional {    var computedOptional: Int? { return nil }}class ChildThatUnwraps: ParentWithComputedOptional {    overrIDe var computedOptional: Int { return 10 }}

请注意,在父级中,computedOptional是一个Int?,但在子级中它被重写为Int.此外,必须为要编译的代码指定overrIDe关键字.这在Playground和一个合适的项目上进行了测试.

这是预期的行为吗?如果是,Apple方案文档中是否有针对此方案的相关页面?

解决方法 这种特殊的覆盖情况似乎没有在官方语言指南中的任何地方记录,但在Swift的 changelog版本中提到了4.0版本(寻找SR-1529).

本主题值得一些额外的信息:

实际上,此行为不仅限于选项,还适用于其他covariant类型,只要重写的属性是派生类中的计算只读属性即可.
例如,以下代码也将在Swift 4.1中编译.

class Animal {}class Koala: Animal {}class Foo {  var x: Animal { return Animal() }}class bar: Foo {  overrIDe var x: Koala { return Koala() }}

这是一个不违反Liskov substitution principle的边缘情况,因为Base类的属性是只读的计算属性.因此,如果bar的实例被保存在Foo类型的变量中,则无法改变其x属性,以便在将对象向下转换为bar类型的变量时创建类型错误.

总结

以上是内存溢出为你收集整理的swift – 覆盖一个计算属性,该属性返回一个Optional值,返回一个非Optional值全部内容,希望文章能够帮你解决swift – 覆盖一个计算属性,该属性返回一个Optional值,返回一个非Optional值所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1018459.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存