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

let names = ["Joffrey", "Cersei", "Mountain", "Hound"]

我有一个函数,需要一个[Any]类型的数组。
func printItems(items: [Any]){
    for item in items {
        print(item)
    }
}

现在,当我使用names作为参数调用该函数时,
printItems(names)

我收到错误无法使用类型为[[String])'的参数列表调用'printItems'。
Any只是所有类型隐式遵循的协议(protocol)的typealias

有什么想法吗?

最佳答案

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

printItems(names.map {$0 as Any})

但是,在Swift中执行此操作的正确方法是使用Generics:
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

10-07 23:40