无法将任何数组类型传递给以[Any]为参数的函数

Ram*_*lya 5 arrays swift

我有一个类型的数组 [String]

let names = ["Joffrey", "Cersei", "Mountain", "Hound"]
Run Code Online (Sandbox Code Playgroud)

我有一个带有[Any]类型数组的函数.

func printItems(items: [Any]){
    for item in items {
        print(item)
    }
}
Run Code Online (Sandbox Code Playgroud)

现在当我用namesas参数调用函数时,

printItems(names)
Run Code Online (Sandbox Code Playgroud)

我收到错误无法使用类型为'([String])'的参数列表调用'printItems'.

Any只是一个typealias所有类型隐式符合的协议.

思考?

vac*_*ama 2

这是 Swift 的一个令人惊讶的限制。您无法将数组强制转换为 type [Any],因此无法将其传递给采用 type 的函数[Any]。您可以使用map来转换数组的每个项目:

printItems(names.map {$0 as Any})
Run Code Online (Sandbox Code Playgroud)

但是,在 Swift 中执行此操作的正确方法是使用泛型

func printItems<T>(items: [T]) {
    for item in items {
        print(item)
    }
}

let names = ["Joffrey", "Cersei", "Mountain", "Hound"]
let numbers = [3.1416, 2.71818, 1.4142, 1.618034]

printItems(names)    // This now works
printItems(numbers)  // This works too
Run Code Online (Sandbox Code Playgroud)