加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift布尔检查

发布时间:2020-12-14 05:00:37 所属栏目:百科 来源:网络整理
导读:所以在Objective-C中使用布尔值时,可以并且鼓励使用变量的非零值来编写代码,因为它是布尔值,这意味着您可以编写如下代码: if (someBool) { // Stuff} 此外,有理由不鼓励使用以下代码: if (someBool == YES) { // Might run into problems here} 检查布尔值
所以在Objective-C中使用布尔值时,可以并且鼓励使用变量的非零值来编写代码,因为它是布尔值,这意味着您可以编写如下代码:

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 = true
if 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 {
    ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读