【发布时间】:2016-03-25 09:43:50
【问题描述】:
我目前正在通过 watch stanford ios 教程系列学习 swift。讲师在第一堂课中提到我们不应该使用 AnyObject。我只是想知道它背后的原因是什么?这是一种糟糕的编码习惯吗?还是因为其他一些原因?提前感谢您的帮助!
【问题讨论】:
-
类型越严格,编译器可以捕获的错误就越多(并且您不会在运行时崩溃)。
我目前正在通过 watch stanford ios 教程系列学习 swift。讲师在第一堂课中提到我们不应该使用 AnyObject。我只是想知道它背后的原因是什么?这是一种糟糕的编码习惯吗?还是因为其他一些原因?提前感谢您的帮助!
【问题讨论】:
AnyObject 表示任何类型的类(或引用类型),它类似于 Objective-C 中的id。它是所有类都隐式遵守的协议。
问题是编译器在编译时不知道它是哪种对象,这意味着您可以轻松构建一个将方法发送到错误对象的应用程序.
这通常会在NSObject 子类“unrecognized selector sent to instance XXXXXX”上触发这种异常并导致崩溃。
Swift 喜欢强类型,这真的很有帮助,因为您可以在问题发生之前解决问题,但是如果您将对象定义为 AnyObject 它可以是一切。
【讨论】: