数组containsObject()扩展名

时间:2017-10-02 02:43:27

标签: arrays swift swift3

我目前正在使用此扩展程序:

extension Array
{
    func containsObject(_ object:Any) -> Bool
    {
        if let anObject:AnyObject = object as? AnyObject
        {
            for obj in self
            {
                if let anObj:AnyObject = obj as? AnyObject
                {
                    if anObj === anObject
                    {
                        return true
                    }
                }
            }
        }
        return false
    }
}

我知道这是次优的。它还会产生一些不必要的编译时警告:

  

从'Any'到'AnyObject'的条件转换总是成功。

     

从'Element'到'AnyObject'的条件转换总是成功。

有人可以建议更好的扩展来检查任何类型对象的包含吗?

1 个答案:

答案 0 :(得分:3)

这意味着不需要使用条件转换。移除if let并将as?更改为as

extension Array {
    func containsObject(_ object: Any) -> Bool {
        for obj in self {
            if obj as AnyObject === object as AnyObject {
                return true
            }
        }
        return false
    }
}

或者简单地说:

extension Array {
    func containsObject(_ object: Any) -> Bool {
        return contains(where: {$0 as AnyObject === object as AnyObject})
    }
}