具有类型约束的Swift通用数组

时间:2014-11-24 11:40:03

标签: generics swift

我试图编写一个返回通用数组的swift方法。我遗漏了一些细节,但保留了重要的一点,为了清晰起见......

protocol AProtocol {
    func doSomething()
}

func decode<T: AProtocol>(jsonArray: Array<AnyObject>?) -> [T: AProtocol] {
    //...
    var resultArray = [T: AProtocol]()
    resultArray.append
    //...
}

当我指定数组包含类型T:AProtocol时,则不再出现追加方法

  

[T:AProtocol]没有名为append的成员

2 个答案:

答案 0 :(得分:3)

在这行代码中:

var resultArray = [T: AProtocol]()

您正在创建一个字典,其密钥为T类型且值为AProtocol类型。

要创建AProtocol数组,只需使用:

var resultArray = [AProtocol]()

否则,如果你想要一个T数组:

var resultArray = [T]()

请注意,实现T协议的AProtocol约束是在函数声明中设置的,因此在函数中使用T时不必重复它体。

答案 1 :(得分:1)

这个[T: AProtocol]()不是数组,而是字典。