2014-09-01 42 views
0

Swift Dictionary中的类型检查值有点遗憾。我期待字符串 - > AnyObject的字典,并希望确保下标“文件”中的元素是一个数组,在继续之前。下面的代码:Swift - 检查数组是否存在于字典中

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"]) <--------- 
} 

我正在上箭头指示的线以下编译器错误:找不到接受所提供的参数“下标”超载。

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

回答

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" 
+0

感谢安东尼奥,这解决了编译器错误,现在按预期工作。 – 2014-09-01 14:58:01

相关问题