Swift对Bool有任何内置的反向功能吗?

时间:2016-12-30 16:11:20

标签: swift boolean

以下扩展程序有效,但我想知道Swift是否有任何开箱即用的功能可以实现这样的反转。我已经命令点击了Bool,它没有任何反向,也没有在文档中看到任何内容。

var x = true

extension Bool{
    mutating func reverse() -> Bool{
        if self == true {
            self = false
            return self
        } else {
          self = true
          return self
        }
    }
}

print(x.reverse()) // false

5 个答案:

答案 0 :(得分:24)

!是“逻辑非”运算符:

var x = true
x = !x
print(x) // false

在Swift 3中,此运算符被定义为Bool的静态函数 类型:

public struct Bool {

    // ...

    /// Performs a logical NOT operation on a Boolean value.
    ///
    /// The logical NOT operator (`!`) inverts a Boolean value. If the value is
    /// `true`, the result of the operation is `false`; if the value is `false`,
    /// the result is `true`.
    ///
    ///     var printedMessage = false
    ///
    ///     if !printedMessage {
    ///         print("You look nice today!")
    ///         printedMessage = true
    ///     }
    ///     // Prints "You look nice today!"
    ///
    /// - Parameter a: The Boolean value to negate.
    prefix public static func !(a: Bool) -> Bool

   // ...
}

没有内置的变异方法否定布尔值, 但您可以使用!运算符实现它:

extension Bool {
    mutating func negate() {
        self = !self
    }
}

var x = true
x.negate()
print(x) // false

请注意,在Swift中,变异方法通常不会返回新的 值(比较数组的sort()sorted())。

更新: proprosal

已被接受,未来版本的Swift将拥有 标准库中的toggle()方法:

extension Bool {
  /// Equivalent to `someBool = !someBool`
  ///
  /// Useful when operating on long chains:
  ///
  ///    myVar.prop1.prop2.enabled.toggle()
  mutating func toggle() {
    self = !self
  }
}

答案 1 :(得分:13)

Swift 4.2

正如马丁先前指出的那样,切换功能终于到了

现在,你可以简单地写一下

bool.toggle()

这会给你预期的结果。

答案 2 :(得分:3)

对于4.2以上的速度

var isVisible = true
print(isVisible.toggle())  // false

其他

isVisible = !isVisible

答案 3 :(得分:2)

最好的方法和最简单的方法之一就是检查 你设置它时,bool等于false:

 var mybool = true
 mybool = mybool == false

mybool将永远是

之前的对立面

答案 4 :(得分:1)

在进行编辑之前,您的功能等同于简单的作业x = !x;

但你现在的方式可以简化为true。 (false映射到falsetrue映射到x ^= 1。)

(请注意,C中的酷猫甚至可以使用"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"切换最低位。)