加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 为什么在force上使用dynamicType nil可选值类型工作?

发布时间:2020-12-14 05:20:33 所属栏目:百科 来源:网络整理
导读:我真的很困惑,发现以下代码只是拒绝崩溃与典型的“意外发现的零,同时解开一个可选值”异常,你会期望从强制展开栏. struct Foo { var bar: Bar?}struct Bar {}var foo = Foo()debugPrint(foo.bar) // nildebugPrint(foo.bar!.dynamicType) // _dynamicType.Ba
我真的很困惑,发现以下代码只是拒绝崩溃与典型的“意外发现的零,同时解开一个可选值”异常,你会期望从强制展开栏.
struct Foo {
    var bar: Bar?
}
struct Bar {}

var foo = Foo()

debugPrint(foo.bar) // nil
debugPrint(foo.bar!.dynamicType) // _dynamicType.Bar

看起来dynamicType是以某种方式能够回退到定义类型的栏 – 没有崩溃.

注意,只有当Bar被定义为值类型(如@dfri says)时,这只会发生,Foo是一个结构或最终类(如pointed out by @MartinR)& foo是可变的.

我最初认为它可能只是一个编译器优化,因为在编译时已经知道条的类型,因此力解除可能被优化了 – 但是当Bar被定义为最终类时它也崩溃.此外,如果我将“优化级别”设置为“无效”,仍然可以使用.

我倾向于认为这是一个奇怪的错误,但是想要一些确认.

这是一个bug或一个功能与dynamicType,或者我只是在这里遗漏的东西?

(使用Xcode 7.3 w / Swift 2.2)

因为dynamicType对类型进行操作,而不是值.在运行时…
foo.bar.dynamicType == Swift.Optional<Bar>

很自然地,当你打开可选项时,你会得到吧

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读