arrays - 数组 containsObject() 扩展

标签 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
    }
}

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

Conditional cast from 'Any' to 'AnyObject' always succeeds.

Conditional cast from 'Element' to 'AnyObject' always succeeds.

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

最佳答案

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

关于arrays - 数组 containsObject() 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46518858/

相关文章:

swift - CGAffine变换到 View 中心

ios - Apple Watch 复杂功能图标或文本

ios - 在展开可选值时意外发现 nil,当尝试更改标签的文本时,由通知触发

php - 将带有数字键的数组转换为对象

php - array_multisort - 不对我的完整表格进行排序

c++ - 将 cin 用于 char 数组

swift - 在 Swift 3 中使用 KVO 检查值是否被更改

java - 如何将数字存储在数组中?

ios - 为什么我的 UIView 背景在切换到下一个 View 时会变形?

ios - AlamofireObjectMapper 在应该给我值(value)的时候得到了 nil