Zag*_*ggo 8 nsnumber optional swift
我有一个带有可选实例变量的NSManagedObject子类
@NSManaged var condition: NSNumber? // This refers to a optional boolean value in the data model
Run Code Online (Sandbox Code Playgroud)
当条件变量存在且包含'true'时,我想做点什么.
当然,我可以这样做:
if let cond = condition {
if cond.boolValue {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望通过可选链接可以做一些更紧凑的事情.像这样的东西:
if condition?.boolValue {
// do something
}
Run Code Online (Sandbox Code Playgroud)
但这会产生编译器错误:
可选类型'$ T4 ??' 不能用作布尔值; 测试'!= nil'而不是
解决这个问题最紧凑的方法是:
if condition != nil && condition!.boolValue {
// do something
}
Run Code Online (Sandbox Code Playgroud)
是否真的无法通过可选链接访问布尔值,或者我在这里遗漏了什么?
Ant*_*nio 15
您可以将它与布尔值进行比较:
if condition == true {
...
}
Run Code Online (Sandbox Code Playgroud)
一些测试用例:
var testZero: NSNumber? = 0
var testOne: NSNumber? = 1
var testTrue: NSNumber? = true
var testNil: NSNumber? = nil
var testInteger: NSNumber? = 10
if testZero == true {
// not true
}
if testOne == true {
// it's true
}
if testTrue == true {
// It's true
}
if testNil == true {
// not true
}
if testInteger == true {
// not true
}
Run Code Online (Sandbox Code Playgroud)
最有趣的是1被认为是true- 这是预期的,因为类型是NSNumber