我有一个类型的数组 [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所有类型隐式符合的协议.
思考?
这是 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)
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |