Swift 是否可以将数组初始化为函数返回值的类型?
例如,我在一个循环外声明了一个数组,该数组将在一个循环内填充自身,尽管我希望在将来API发生变化时对其进行推广Swift 是否可以将数组初始化为函数返回值的类型?,swift,Swift,例如,我在一个循环外声明了一个数组,该数组将在一个循环内填充自身,尽管我希望在将来API发生变化时对其进行推广 var array: [TypeOfReturn] for var i = 0; i < someArray.count; i++ { array = someFunction() } // --- elsewhere --- func someFunction() -> [TypeOfReturn] { // Do work } 我想做的是在本例中
var array: [TypeOfReturn]
for var i = 0; i < someArray.count; i++ {
array = someFunction()
}
// --- elsewhere ---
func someFunction() -> [TypeOfReturn] {
// Do work
}
我想做的是在本例中采用类型[TypeOfReturn],并将循环外的数组声明为该类型,就这样。我讨厌optionals,AnyObject是不合适的,如果没有一些诡计,语言的语法似乎也不支持这一点。有人知道这些诡计是什么吗?每当你说这两件事应该是同一类型的时候,你就是在描述一个泛型。不幸的是,您将不得不将使用这种类型的东西打包成一个泛型,但这对您来说可能是值得的。例如:
struct S<T> {
var array : [T] = []
func someFunction (x:T) -> [T] {
return [x]
}
}
var s = S<Int>()
s.array = s.someFunction(1)
或者,根据您的需要,只有数组需要位于泛型结构中:
struct S<T> {
var array : [T]
}
func someFunction(x:Int) -> [Int] {
return [x]
}
let s = S(array:someFunction(1))
第二种方法的优点是T类型可以隐式解析。使用typealias可以满足您的需要吗?当然可以,不过我更喜欢使用某种方式来保持耦合的松散。如果你真的不能把TypeOfReturn定义为结构或类,你可以考虑将TypeOfReturn定义为协议。