关于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'的重载。
有关如何解决此错误的任何线索?
答案 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"