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-C int(C int,因为它们是从 C 导入的)没有 nil 值,因为它们不是对象。通常使用一个特殊的值来表示int0 在这种情况下是个坏主意。这称为“零为空”反模式。 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 中获取 nil 值

“致命错误:在 Swift ios 中使用 vImageBuffer_initWithCGImage 时在展开可选值时意外发现 nil”

如何将 NSString 转换为 NSNumber