收到以下错误:
Binary operator '==' cannot be applied to operands of type 'UInt16' and '() -> UInt16'
在这段代码中:
let array: [UInt16] = [3,4, 7]
let x = NSNumber(value: 4)
let option = array.filter { (test) -> Bool in
return test == x.uint16Value // compiler complains here
}
print(option) // "[4]"
通常这种类型的错误意味着要比较两个单独的类值。这里编译器认为我正在将uint16值与返回uint16值的函数进行比较。
我的意思是打电话给NSNumber的uint16属性getter。
// defined in NSNumber
open var uint16Value: UInt16 { get }
我被告知通过添加括号(例如.uint16Value()
)来进行函数调用。但这会导致跟进错误:
Cannot call value of non-function type 'UInt16'
我已经把这个确切的代码放到了一个操场上,它运行得非常好。 有没有其他人遇到这个?还是看过这种行为?你打败了吗?
更新
设置为局部变量时,不会产生任何差异。我最近在Xcode 8.0中运行了从Swift 2.2或2.3到swift 3的迁移工具。似乎语法或迁移没有任何问题。
let y = x.uint16Value
return test == y // compiler complains here