NSNumber如何? == nil 在运行时在 Objective-C 中提交?
Posted
技术标签:
【中文标题】NSNumber如何? == nil 在运行时在 Objective-C 中提交?【英文标题】:How NSNumber? == nil is submitted in Objective-C during runtime? 【发布时间】:2017-12-18 16:21:59 【问题描述】:今天我开始创建简单的 xcdatamodel,其中只有 1 个实体和几个属性。所以当我在 nsmanagedobject 的类定义中创建整数 16 类型的数字属性时,它的类型表示为 NSNumber?
class JournalEntry : NSManagedObject
@NSManaged var date: Date?
@NSManaged var height: String?
@NSManaged var period: String?
@NSManaged var wind: String?
@NSManaged var location: String?
@NSManaged var rating: NSNumber?
为什么不在 int16 中? (我读过 objc 没有 int? 类型) (因为在模型中我允许属性是可选的)所以如果我不给 NSNumber 赋值?属性在运行时如何在 objc 中表示? (它会为零?p.s.我将初始值删除为零,所以没有初始值)
【问题讨论】:
Objective-Cint
(C int
,因为它们是从 C 导入的)没有 nil
值,因为它们不是对象。通常使用一个特殊的值来表示int
。 0
在这种情况下是个坏主意。这称为“零为空”反模式。
JournalEntry
的定义从何而来? Xcode 生成了吗?您是否使用其他工具生成它?你是手写的吗?我试图在 Xcode 10.1 中重现您的问题,但我找不到将属性放入 class
的方法。我只能让它把属性放在extension
中。
【参考方案1】:
由于您的评分是可选的 NSNumber,因此初始值为 nil(您可以将其理解为“无值”)或您在 CoreData 模型编辑器中提供的默认值。 同样在 swift 中,您应该能够使用 Int64 而不是 NSNumber
【讨论】:
谢谢,请问您知道 swift nil 对象在 objc 运行时中如何表示吗?我的意思是如果int?是 nil,所以在 objc 运行时它将是什么,它将被转换为什么内容 Swift nil ~= Objective-C nil。至于INT?在 Obj-C 中,查看:***.com/questions/24221407/…以上是关于NSNumber如何? == nil 在运行时在 Objective-C 中提交?的主要内容,如果未能解决你的问题,请参考以下文章
Swift:在运行时在非可选中检测到意外的 nil 值:强制转换为可选失败
NSNumber 为 0 转换为 NSInteger/NSUInteger 变为 nil
在字典中添加 NSIndexPath 作为键和 NSNumber 作为值的问题?
“致命错误:在 Swift ios 中使用 vImageBuffer_initWithCGImage 时在展开可选值时意外发现 nil”