加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:33:18 所属栏目:百科 来源:网络整理
导读:我想将它们用作我的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
我想将它们用作我的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

原因是||的“短路”行为operator:如果是第一个
操作数为true,则根本不能评估第二个操作数.

所以你必须将参数声明为

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

例:

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

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

注意:我使用Xcode 6.1.1进行了测试. autoclosure的语法
Swift 1.2(Xcode 6.3)中的参数已更改,我还没有
为Swift 1.2翻译上面的代码(另见Rob的评论
下面).

我现在唯一可以提供的东西非常难看
解决方法.你可以包装||进入一个没有的封闭
autoclosure参数:

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

let result = combineWith(false,{ $0 || $1() } )

或者你没有短路行为:

func combineWith(a : Bool,Bool) -> Bool) -> Bool {
    return combine(a,{ $0 || $1 } )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读