例如,我已经在一个循环之外声明了一个数组,它将在循环中填充自己,但是我希望在以后API发生变化时对其进行概括。
var array: [TypeOfReturn]
for var i = 0; i < someArray.count; i++ {
array = someFunction()
}
// --- elsewhere ---
func someFunction() -> [TypeOfReturn] {
// Do work
}
我喜欢做的是采用类型(在这种情况下为[TypeOfReturn]
)并将循环外的数组声明为此类型,这就是它。我讨厌选项而且AnyObject
是不合适的,如果没有一些恶作剧,语言的语法似乎并不支持。有谁知道这些恶作剧是什么?
答案 0 :(得分:0)
每当你说&#34;这两个东西应该是相同的类型&#34;,你描述的是通用的。不幸的是,你必须将使用这种类型的东西打包成一个通用的东西,但它可能是值得的。例如:
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.