if (someBool) { // Stuff}
此外,有理由不鼓励使用以下代码:
if (someBool == YES) { // Might run into problems here}
检查布尔值与另一个布尔值的原因更好地解释了here,但简单地说问题就是当你将等式直接比较为YES或NO时,你实际上分别与1和0进行比较.由于Objective-C允许使用非零值作为真值,因此您最终可能会比较一些应该被认为是真的对YES,并将表达式解析为NO,例如,
int trueNumber = 2;if (trueNumber == YES) { // Doesn't run because trueNumber != 1}
这仍然是Swift中的一个问题吗?抛开代码风格问题,如果我看到类似以下的内容
var someBool = trueif someBool == true { // stuff}
这会成为一个问题,还是不重要?这些C风格的比较是否仍然在幕后发生,或者Swift BooleanType中是否存在可以防止这些问题的内容?
解决方法 if< something> Swift中的{}结构需要< something>符合BooleanType协议,该协议定义如下:public protocol BooleanType { /// The value of `self`,expressed as a `Bool`. public var boolValue: Bool { get }}
如果类型不符合此协议,则抛出编译时错误.如果在标准库中搜索此协议,您会发现唯一符合此协议的类型是Bool本身. Bool是一种可以是真或假的类型.不要把它想象为数字1或0,而是将其设为On / Off Right / Wrong.
现在这个协议可以符合你想要的任何名义类型,例如:
extension Int : BooleanType { public var boolValue : Bool { return self > 0 }}
现在,如果你这样做(你不应该诚实地),你自己定义“真”和“假”的含义.现在你可以像这样使用它(再次,不要这样做):
if 0 { ...}总结
以上是内存溢出为你收集整理的Swift布尔检查全部内容,希望文章能够帮你解决Swift布尔检查所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)