Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否可以将数组初始化为函数返回值的类型?_Swift - Fatal编程技术网

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

Swift 是否可以将数组初始化为函数返回值的类型?,swift,Swift,例如,我在一个循环外声明了一个数组,该数组将在一个循环内填充自身,尽管我希望在将来API发生变化时对其进行推广 var array: [TypeOfReturn] for var i = 0; i < someArray.count; i++ { array = someFunction() } // --- elsewhere --- func someFunction() -> [TypeOfReturn] { // Do work } 我想做的是在本例中

例如,我在一个循环外声明了一个数组,该数组将在一个循环内填充自身,尽管我希望在将来API发生变化时对其进行推广

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定义为协议。