Apple Swift:初始化通用类型的数组

nal*_*d88 4 arrays generics swift

我有一个泛型类型T的数组(类的成员).泛型类型只是数字类型(double,int等).我的问题是如何在初始化程序中将此数组初始化为所有相同的数字?

我见过这个:

self.data = Double[](count: 3, repeatedValue: 1.0)
Run Code Online (Sandbox Code Playgroud)

所以我尝试了这个,但它不起作用......

self.data = T[](count: 3, repeatedValue: 1.0)
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做吗?谢谢.

Joh*_*tes 8

所以,这就是我刚才所做的:

protocol Initable {
    init()
}

class Bar:<T: Initable> {
    var     ar: T[]

    init(length: Int) {
        self.ar = T[](count:length, repeatedValue: T())
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你必须确保T你使用的任何实现Initable协议,例如:

extension Int:Initable {}
Run Code Online (Sandbox Code Playgroud)

这让我这样做:

var foo = Bar<Int>(3)
Run Code Online (Sandbox Code Playgroud)

我还使用了原型替代方案:

class Bar:<T> {
    var     ar: T[]

    init(length: Int, proto:T) {
        self.ar = T[](count:length, repeatedValue:proto)
    }
}
Run Code Online (Sandbox Code Playgroud)

它不需要协议,但需要提供的初始值:

var foo = Bar<Int>(length: 3, proto: 34)
Run Code Online (Sandbox Code Playgroud)

  • 从我对文档的阅读来看,原型实现的问题是如果类型`T`是一个类,它将通过引用传递,这意味着你的数组将填充一个对单个实例的引用列表. (2认同)