我对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”的重载。
关于如何避免这个错误有什么线索吗?

最佳答案

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

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"

关于arrays - Swift-检查字典中是否存在数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25608170/

10-13 07:10