正如文档所说" 您确定可选项确实包含值,您可以通过添加感叹号(!)来访问其基础值 "
那么为什么UIViewController使用init方法呢
init(nibName nibName: String!,bundle nibBundle: NSBundle!)
并告诉我" 如果指定nil,则nibName属性设置为nil. "
为什么init(nibName nibName: String?,bundle nibBundle: NSBundle?)不用呢?
我对此很困惑.
init(nibName nibName: String!,bundle nibBundle: NSBundle!)
Run Code Online (Sandbox Code Playgroud)
正在调用 Objective C 框架代码。这将调用 initWithNibName:bundle。您可以选择传递此方法的参数 nil。Objective C 对此很满意。如果您在 initiWithNibName 中传递 nil ,它会尝试根据相关类的名称为您解析名称。如果你为bundle传入nil,它会将其替换为[NSBundle mainBundle]。
因此,Swift 将此参数设置为可选参数。它必须这样做才能允许变量可以选择为零。问题是为什么它不使其成为标准可选并要求您显式解开它。答案是,隐式解包的可选值在将其传递给 Objective C 之前立即解包可选值。您不希望必须显式解包它,因为一旦您传入参数(无论是 nil 还是其他),您就完成了它的设置。您不想显式地解开它然后将其传递给 Objective C!这样做没有任何意义。
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |