以下扩展程序有效,但我想知道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
答案 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)
正如马丁先前指出的那样,切换功能终于到了
现在,你可以简单地写一下
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
映射到false
,true
映射到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"
,切换最低位。)