我对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/