Swift 4 Array Map nil to String

Dar*_*ary 5 arrays swift

所以我有这个简单的代码,并有快速数据类型的问题,想要映射这个数组

 ["a", "b", nil, "c", "d", nil]
Run Code Online (Sandbox Code Playgroud)

 ["a", "b", "z", "c", "d", "z"]
Run Code Online (Sandbox Code Playgroud)

所以,这是我目前的代码

import Foundation

let array1 = ["a", "b", nil, "c", "d", nil]
let newArray = array1.map { (currentIndex: Any) -> String in
    if currentIndex == nil  {
        return "z"
    }
    return currentIndex as! String
}
print(newArray)
Run Code Online (Sandbox Code Playgroud)

如果您尝试解决代码,我将不胜感激.谢谢.

Mar*_*n R 11

如果你声明currentIndexAny那么你就不能再将它与之比较nil了.你的案例中的正确类型是String?:

let newArray = array1.map { (currentIndex: String?) -> String in
    if currentIndex == nil  {
        return "z"
    }
    return currentIndex!
}
Run Code Online (Sandbox Code Playgroud)

但是,编译器可以从上下文中自动推断:

let newArray = array1.map { currentIndex -> String in
    if currentIndex == nil  {
        return "z"
    }
    return currentIndex!
}
Run Code Online (Sandbox Code Playgroud)

更好地使用零合并操作符??,并避免强制解包:

let newArray = array1.map { currentIndex in
    currentIndex ?? "z"
}
Run Code Online (Sandbox Code Playgroud)

或更短:

let newArray = array1.map { $0 ?? "z"  }
Run Code Online (Sandbox Code Playgroud)