作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个[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
关于arrays - 无法将任何数组类型传递给以 [Any] 作为参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697093/
我是一名优秀的程序员,十分优秀!