在Swift 4中访问包装在NSString中的CFBoolean

时间:2018-11-05 21:25:53

标签: objective-c swift

我有一个来自服务器的值,它被保存到NSString变量中(服务器有时将它作为字符串返回,有时作为布尔值返回)。

请假定无法更改此部分代码。

当我将Objc部分重写为Swift 4时出现了问题

我在Objc中拥有的代码:

[data.isActive boolValue]

在swift 4中,由于String中没有.boolValue表示法而导致失败,您只能使用Bool()语法将String转换为bool。并且由于该值不是真实的字符串,因此调用Bool()会在崩溃时解决,因为CFBoolean unrecognized selector是因为它是从String强制包装而来的。

有没有什么办法可以克服这些问题而又不退缩那些包装这些转换的Objc代码呢?

请选中此test project on GitHub

它甚至无法将那些类型的值分配给任何swift对象。

1 个答案:

答案 0 :(得分:0)

从布尔0"0""NO", ``false"false"甚至{{1}的BOOL角度来看,

Objective-C对类型非常不敏感 }为nil,其他所有内容均视为false。这就是true具有NSString属性的原因。它只返回boolValue

Swift是一种强类型语言。您必须检查类型:

value != 0