逻辑运算符的类型是什么?

What is the type of the logical operators?

我想将它们用作我的 Region 结构方法的参数:

private func combineWith(region: RegionProtocol, combine: (Bool, Bool) -> Bool) -> Region {
    return Region() {point in
        combine(self.contains(point), region.contains(point))
    }
}

但显然,(Bool, Bool) -> Bool) 不是 && 或 || 的意思是。如果你知道,请告诉我你是怎么发现的。

如果你"cmd-click"在语句"Swift"上的单词

import Swift

在Xcode中搜索||然后你会发现它被声明为

func ||<T : BooleanType>(lhs: T, rhs: @autoclosure () -> Bool) -> Bool

原因是 "short-circuiting" 操作符的 || 行为:如果第一个 操作数为真,则不得对第二个操作数求值。

所以你必须声明参数为

combine: (Bool, @autoclosure () -> Bool) -> Bool

示例:

func combineWith(a : Bool, b : Bool, combine: (Bool, @autoclosure () -> Bool) -> Bool) -> Bool {
    return combine(a, b)
}

let result = combineWith(false, true, ||)
println(result)

注意: 我用 Xcode 6.1.1 测试了这个。自动关闭的语法 Swift 1.2 (Xcode 6.3) 中的参数发生了变化,我还不能 为 Swift 1.2 翻译上面的代码(另见 Rob 的评论 下面)。

我现在唯一能提供的就是丑到极点 解决方法。您可以将 || 包装到一个没有的闭包中 自动关闭参数:

func combineWith(a : Bool, b : Bool, combine: (Bool, () -> Bool) -> Bool) -> Bool {
    return combine(a, { b })
}

let result = combineWith(false, true, { [=14=] || () } )

或者你没有短路行为:

func combineWith(a : Bool, b : Bool, combine: (Bool, Bool) -> Bool) -> Bool {
    return combine(a, b)
}

let result = combineWith(false, true, { [=15=] ||  } )