是否可以将数组初始化为函数返回值的类型?

时间:2015-05-28 19:31:10

标签: swift

例如,我已经在一个循环之外声明了一个数组,它将在循环中填充自己,但是我希望在以后API发生变化时对其进行概括。

var array: [TypeOfReturn]

for var i = 0; i < someArray.count; i++ {
    array = someFunction()
}

// --- elsewhere ---

func someFunction() -> [TypeOfReturn] {
    // Do work
}

我喜欢做的是采用类型(在这种情况下为[TypeOfReturn])并将循环外的数组声明为此类型,这就是它。我讨厌选项而且AnyObject是不合适的,如果没有一些恶作剧,语言的语法似乎并不支持。有谁知道这些恶作剧是什么?

1 个答案:

答案 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.