我正在使用CoreBluetooth框架制作应用程序,我最近将其移植到swift 2.0。在我的代码中,我有一个全局变量,它是一个CBC特性,在swift 1.2中我可以做到:
var bob:CBCharacteristic = CBCharacteristic()
但是现在它给了我一个错误,即CBCharacteristic的init()函数已被明确隐藏,所以我无法初始化它。有没有办法解决这个问题?
答案 0 :(得分:3)
CBCharacteristic
的实例只能通过服务发现过程检索。
在你的Swift 1.2代码中,你分配了一个空的' CBCharacteristic
只是为了满足编译器关于未初始化变量的要求,但如果您在分配“真实”变量之前尝试使用bob
,则会遇到运行时问题。 CBCharacteristic
。
Swift旨在使其更容易生产"安全"代码不正确使用类型不会产生细微的运行时问题。直接实例化CBCharacteristic
的实例是没有意义的,并且在Swift 2.0中你被积极地阻止这样做。
如果您的CBCharacteristic
是属性,则应将其声明为可选项,因为在发现此特征之前它可能没有值
var bob:CBCharacteristic?
或者,如果您确定您的代码在设置之前未尝试访问bob
-
var bob:CBCharacteristic!
第一个将确保您在使用之前编写代码来解包可选项,如果在设置之前使用它,则第二个将提供运行时错误 - 这两个都优于可能难以调试的问题你会简单地引用一个空的' CBCharacteristic