我正在使用coreblutooth框架制作一个应用程序,最近我将它移植到了swift 2.0。在我的代码中,我有一个全局变量,它是CBCharacteristic,在swift 1.2中,我可以做:

var bob:CBCharacteristic = CBCharacteristic()

但现在它给了我一个错误,CBCharacteristic的init()函数被显式隐藏,所以我无法初始化它。有什么办法绕过这个吗?

最佳答案

CBCharacteristic的实例只能通过服务发现过程检索。
在Swift 1.2代码中,您分配一个'empty'CBCharacteristic只是为了满足编译器对未初始化变量的要求,但是如果您在分配'real'bob之前尝试使用CBCharacteristic,则会出现运行时问题。
Swift的设计目的是使生成“安全”代码变得更容易,因为不正确使用类型不会产生微妙的运行时问题。直接实例化CBCharacteristic的实例是没有意义的,在Swift 2.0中,会主动阻止您这样做。
如果CBCharacteristic是一个属性,则应将其声明为可选,因为在发现特征之前,它可能没有值

var bob:CBCharacteristic?

或者,如果您确定您的代码在设置之前不会尝试访问bob-
var bob:CBCharacteristic!

第一个将确保您在使用可选项之前编写代码以展开它,第二个将在设置之前使用它时给出运行时错误-这两个都比您可能遇到的难以调试的问题更可取,因为您只需引用一个“空的”CBCharacteristic

关于ios - Swift 2.0:初始化CBCharacteristic?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31949303/

10-13 03:49