Swift协议阵列添加与实例化

时间:2016-07-25 20:34:02

标签: swift

在swift 3.0 Xcode beta 3中,我定义了一个相当简单的协议和两个实现它的结构,如果我在创建对象时初始化数组,它可以工作,但如果我尝试添加元素,我会收到错误:

  

无法将'[H]'类型的值转换为预期参数类型'inout _'

不应该这样吗?

protocol H {
    var v : Int { get set }
    func hello()
}

struct J : H {
    var v : Int
    func hello() {
        print("j")
    }
}

struct K : H {
    var v : Int
    func hello() {
        print("k")
    }
}

let ag:[H] =  [K(v:3), J(v:4)] // works
ag[0].hello()
ag[1].hello()

var af:[H] =  []
af += [K(v:3)] // does not work
af += [J(v:4)] // does not work
af[0].hello()
af[1].hello()

1 个答案:

答案 0 :(得分:3)

这是一个类型问题。您需要添加到af的内容与af的内容类型相同,即[H]

var af:[H] = []
let arr1:[H] = [K(v:3)]
let arr2:[H] = [J(v:4)]
af += arr1
af += arr2