多次使用相同的闭包参数将无法编译

时间:2015-04-16 09:15:54

标签: swift

为什么不编译以下内容:

extension Array {

    func firstWhere(fn: (T) -> Bool) -> T? {
        for x in self {
            if fn(x) {
                return x
            }
        }
        return nil
    }
}

var view = UIView()
// Do setup here of view if you want (but shouldn't be necessary)

let x = view.subviews.firstWhere { $0.tag? == 1 && $0.userInteractionEnabled } as? UIView

编译器说:找不到会员' userInteractionEnabled'

1 个答案:

答案 0 :(得分:1)

由于view.subviews的类型为[AnyObject],因此您必须先将其[UIView]强制转换为userInteractionEnabled。 所以:

(view.subviews as! [UIView]).firstWhere( ... )

而且我不确定您使用的是哪个版本的Xcode,但是这(我的意思是不需要tag末尾的问号):

let x = (view.subviews as! [UIView]).firstWhere { $0.tag == 1 && $0.userInteractionEnabled }

在Xcode 6.3中编译得很好。