Nik*_*iev 33 xcode core-data ios swift
(首先注意到:Xcode 8.2.1,iOS 10,Swift 3)(仍然存在:Xcode 9 beta 3,iOS11,Swift 4)
我们都知道先行的Core Data概念optionals并没有严格地与Swift概念联系在一起optionals.
我们已经接受了即使Core Data属性被标记为Non-optional,自动生成的NSManagedObject子类也有一个optional类型:
(有些人手动删除?没有任何不利影响,有些人没有,但这是不重要的)
(从这里的例子和截图是Bool性能,但同样适用于Int16/32/64,Double,Float)
现在我注意到了相反的情况 - 当Core Data类型的属性Bool被标记为Optional(并且Use Scalar Type被选择,Xcode默认执行)时,自动生成的类具有non-optional类型的变量.
这有意义吗?这是一个错误吗?行为记录在任何地方吗?
最重要的是 - 我如何实际代表一个可选项Bool?
我可以想到一些解决方法,但它们似乎并不理想(例如,不使用标量,而是回到NSNumber表示Bool.或者(甚至更糟)有一个单独Bool调用的东西isVerified_isSet)
注意:我做了几个测试,如果Default Value设置为None或NO,则变量保存为false(即使我从未在我的代码中实际分配它).如果Default Value设置为YES,则变量将保存为true.尽管如此,这意味着(显然)没有办法在逻辑上将此变量表示为尚未设置.
Tom*_*ton 20
我看到同样的事情,我认为这是一个错误.我没有找到任何可以找到的文件.显然Core Data正在应用Objective-C样式假设,其中布尔值默认为NO,并且整数默认为0.核心数据/ Swift接口有一些粗糙的边缘,这是我以前没有考虑过的.
这是一个很好的发现,但我认为你坚持使用它,直到Apple解决它.你已经知道最好的解决方法,我同意这不是很好.我建议提交一个bug.
Saú*_*ril 10
我宁愿使用 Objective-C 类型来管理这些情况,而不是 Swift 类型。在这些情况下,对于标量类型,您可以使用 NSNumber。
@NSManaged public var myDouble: NSNumber?
Run Code Online (Sandbox Code Playgroud)
在模型中 myDouble 是一个可选的 double,默认情况下值为 nil。
要获得真正的价值,您只需要使用:
myEntity.myDouble?.doubleValue
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5443 次 |
| 最近记录: |