在 swift 中执行组合布尔值
Execution of combined Booleans in swift
我有一个关于计算 属性 的问题,我在其中使用计算布尔值的组合来获得结果。我了解代码背后的逻辑,但我在我的代码中使用了一些打印语句(用于调试),当早期的布尔值之一为假时,这些语句不会被调用。如果 check1 为假,则无需执行 check2 和 check3,因为结果将为假,但我仍想访问该代码中的打印语句。在这里的示例中,我只是检查是否正在访问 var,在我的应用程序中它更复杂,这就是为什么我希望打印出一些逻辑的结果。知道如何解决这个问题吗?所以基本上我很想在调试器中查看所有调用的结果,无论结果是真还是假。
var checkedIsTrue: Bool {
var check1: Bool {
print("checked 1")
return 2 < 1 ? true : false // When false, check2 and check3 are not executed
}
var check2: Bool {
print("checked 2")
return 3 < 4 ? true : false
}
var check3: Bool {
print("checked 3")
return 4 < 5 ? true : false
}
if check1 && check2 && check3 {
return true
} else {
return false
}
}
print(checkedIsTrue ? "check is OK" : "check is NOK")
&&
是一个“short-circuiting”运算符:如果左操作数为假,则根本不会计算右操作数。
如果您希望(出于调试目的)计算所有布尔表达式,这里有两个可能的选项。
选项 1: 在组合之前创建一个包含所有布尔结果的数组:
if [check1, check2, check3].allSatisfy({ [=10=] }) { ... }
选项 2: 定义你自己的“逻辑与”运算符,它不 short-circuit:
infix operator &&&: LogicalConjunctionPrecedence
extension Bool {
static func &&&(left: Bool, right: Bool) -> Bool {
left && right
}
}
if check1 &&& check2 &&& check3 { ... }
可能有更多方法可以实现这一点。
我有一个关于计算 属性 的问题,我在其中使用计算布尔值的组合来获得结果。我了解代码背后的逻辑,但我在我的代码中使用了一些打印语句(用于调试),当早期的布尔值之一为假时,这些语句不会被调用。如果 check1 为假,则无需执行 check2 和 check3,因为结果将为假,但我仍想访问该代码中的打印语句。在这里的示例中,我只是检查是否正在访问 var,在我的应用程序中它更复杂,这就是为什么我希望打印出一些逻辑的结果。知道如何解决这个问题吗?所以基本上我很想在调试器中查看所有调用的结果,无论结果是真还是假。
var checkedIsTrue: Bool {
var check1: Bool {
print("checked 1")
return 2 < 1 ? true : false // When false, check2 and check3 are not executed
}
var check2: Bool {
print("checked 2")
return 3 < 4 ? true : false
}
var check3: Bool {
print("checked 3")
return 4 < 5 ? true : false
}
if check1 && check2 && check3 {
return true
} else {
return false
}
}
print(checkedIsTrue ? "check is OK" : "check is NOK")
&&
是一个“short-circuiting”运算符:如果左操作数为假,则根本不会计算右操作数。
如果您希望(出于调试目的)计算所有布尔表达式,这里有两个可能的选项。
选项 1: 在组合之前创建一个包含所有布尔结果的数组:
if [check1, check2, check3].allSatisfy({ [=10=] }) { ... }
选项 2: 定义你自己的“逻辑与”运算符,它不 short-circuit:
infix operator &&&: LogicalConjunctionPrecedence
extension Bool {
static func &&&(left: Bool, right: Bool) -> Bool {
left && right
}
}
if check1 &&& check2 &&& check3 { ... }
可能有更多方法可以实现这一点。