组合多个Bool返回值而不会短路

Ane*_*nce 1 objective-c bitwise-and swift

Swift 2限制了对Bool值使用按位运算符.这是令人愉快的.在ObjC中,当您需要执行每个操作数时使用它非常有用.例如:

a.isFoo() & b.isFoo() & c.isFoo()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用按位&将执行每个方法.

如果我使用逻辑运算符&&,它将执行第一个运算符,如果它是false,表达式将返回false而不执行其他两个操作数.

我想找到同样优雅的方式工作,与Bool斯威夫特.可能吗?

mat*_*att 6

您在Objective-C中所做的并不"优雅".它很邋and,你不应该这样做.如果你想调用三种方法,只需调用这三种方法!但是形成一个布尔表达式,你应该使用逻辑运算符,而不是按位运算符.所以,例如:

let (ok1, ok2, ok3) = (a.isBool(), b.isBool(), c.isBool())
let ok = ok1 && ok2 && ok3
Run Code Online (Sandbox Code Playgroud)

  • 在Objective-C中,它不仅仅是笨拙而是破碎.在64位运行时之前,`BOOL`只是`char`的`typedef`,因此它有255个不同版本的`YES`.所以`YES&YES&YES`可以评价为'NO`,而'YES && YES && YES`则不能.我能找到最快的来源:https://www.bignerdranch.com/blog/bools-sharp-corners/ (5认同)