错误Swift编程如何搜索[Any]数组 - >通用参数'C.Generator.Element'不能绑定到非@ ob

时间:2015-04-02 00:20:54

标签: arrays swift

您好我正在尝试使用各种对象搜索数组,但我收到错误。

  

通用参数'C.Generator.Element'不能绑定到非@ ob

这是我正在使用的代码:

var arraySearching = [Any]()
arraySearching = ["this","that",2]
find(arraySearching, 2)

如何搜索[Any]类型的数组?

1 个答案:

答案 0 :(得分:5)

这是一个误导性的错误消息,但问题是find要求您搜索的集合的内容为Equatable,而Any则不是。事实上你根本不能对Any做很多事情,更不用说将它与其他类型的值等同起来。你必须将其转换为真实类型,然后使用它。

在闭包中很容易做到,除了没有find的版本需要关闭。但是写一个很容易:

func find<C: CollectionType>(source: C, match: C.Generator.Element -> Bool) -> C.Index? {
    for idx in indices(source) {
        if match(source[idx]) { return idx }
    }
    return nil
}

完成此操作后,您可以使用它在Any数组中搜索特定类型的值:

find(arraySearching) { 
    // cast the candidate to an Int, then compare (comparing an
    // optional result of as? works fine, nil == 2 is false)
    ($0 as? Int) == 2 
}