Bool属性无法在swift中标记为动态

Den*_*ndy 9 key-value-observing swift

我正在尝试Bool使用KVO在swift中观察值并添加如下dynamic修饰符:

dynamic var isRestricted:Bool?
Run Code Online (Sandbox Code Playgroud)

而编译器说

属性不能标记为动态,因为其类型可以在Objective-C中表示

那我该怎么办?我应该为此更改为NSNumber吗?那么观察价值的最佳做法是什么?

即时通讯使用xcode 7 beta 2

Mar*_*n R 34

实际问题是可选的布尔值不能用Objective-C表示(因此没有标记为动态).使用非可选

dynamic var isRestricted : Bool = false
Run Code Online (Sandbox Code Playgroud)

应该解决问题.

通常,"optionals"的概念不存在Objective-C,但是NSObject对子类实例的可选引用被桥接到Objective-C中的可空对象指针,所以

dynamic var foo: Foo?
Run Code Online (Sandbox Code Playgroud)

如果(且仅)if Foo是子类,则允许NSObject.

  • 这是部分正确的.你**可以**标记为动态的可选属性,但不是布尔值或整数.例如,你可以拥有``dynamic var myObject:MyClass?`` (2认同)