Swift - 检查Dictionary中是否存在数组

时间:2014-09-01 14:37:44

标签: arrays swift

关于Swift字典中的类型检查值,我有点不知所措。我期待一个String字典 - > AnyObject并希望确保下标“file”中的元素在继续之前是一个数组。这是代码:

extension Array {
    static func ensureValueIsArray(arrayValue: AnyObject?) -> Array<AnyObject> {
        if let array = arrayValue as? Array<AnyObject>  {
            return array
        } else {
            return [AnyObject]()
        }
    }
}

func generateModel(responseDictionary: Dictionary<String, AnyObject>) -> ResponseModel        
{
    var files = Array.ensureValueIsArray(responseDictionary["file"]) <--------- 
}

我在箭头指示的行上遇到以下编译器错误:找不到接受提供的参数的'subscript'的重载。

有关如何解决此错误的任何线索?

1 个答案:

答案 0 :(得分:2)

您必须使用泛型重写扩展方法:

extension Array {
    static func ensureValueIsArray(arrayValue: T?) -> Array<T> {
        if let array = arrayValue as? Array<T>  {
            return array
        } else {
            return [T]()
        }
    }
}

在操场上测试:

generateModel(["file": [1, 2, 3]]) // Prints "[1, 2, 3]"
generateModel(["file": 1]) // Prints "0 elements"
generateModel(["something": 1]) // Prints "0 elements"