【问题标题】:Array containsObject() extension数组 containsObject() 扩展
【发布时间】:2017-10-02 02:43:26
【问题描述】:

我目前正在使用这个扩展:

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”的条件转换总是成功。

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

【问题讨论】:

    标签: arrays swift swift3


    【解决方案1】:

    这意味着不需要使用条件转换。删除 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})
        }
    }
    

    【讨论】:

    • 谢谢!第二个扩展是我一直在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2016-06-10
    • 2015-08-25
    • 2021-11-01
    相关资源
    最近更新 更多