无法将'Option'类型的值转换为预期的参数类型'@noescape(Option)throws - > Bool'

Isu*_*uru 4 arrays realm ios swift swift2

我有一个叫做的课Option.这是一个Realm对象,因此它是Realm自己的基类的子类Object.

在视图控制器中,我有一个包含一堆Option对象的数组属性.

private var options = [Option]()
Run Code Online (Sandbox Code Playgroud)

在视图控制器中的方法中,我需要检查Option上述选项数组中是否包含某个对象.

以前(Swift 1.2),我有这样的检查逻辑.

func itemSelected(selection: Object) {
    let option = selection as! Option

    if !contains(options, option) {
        // act accordingly
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我将项目转换为Swift 2(我已经将Realm的版本更新为Swift 2版本).我将代码更新为此.

func itemSelected(selection: Object) {
    let option = selection as! Option

    if !options.contains(option) {
        // act accordingly
    }
}
Run Code Online (Sandbox Code Playgroud)

但是现在我得到以下编译错误!

无法将'Option'类型的值转换为预期的参数类型'@noescape(Option)throws - > Bool'

我无法弄清楚为什么.有任何想法吗?

kab*_*rai 9

这是因为contains函数现在需要闭包而不是所有非等同类型的元素.您需要做的就是将其更改为以下内容

if !(options.contains{$0==option}) {
    // act accordingly
}
Run Code Online (Sandbox Code Playgroud)

它的作用是将闭包传递给函数,只有当闭包满足其任何元素时才返回true.$0表示contains函数正在测试的数组中的当前元素,如果该元素等于您要查找的元素,则返回true.