我有一个[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