Swift 4 数组 Map nil 转为字符串

5

我有一个简单的代码,遇到了Swift数据类型的问题,想要从这个数组中进行映射:

 ["a", "b", nil, "c", "d", nil]

to

 ["a", "b", "z", "c", "d", "z"]

所以,这是我的当前代码

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)

如果您能尝试解决这段代码,我将不胜感激。谢谢。

2个回答

11
如果你将currentIndex声明为Any,那么你将无法将其与nil 进行比较。在您的情况下,正确的类型应该是String?
let newArray = array1.map { (currentIndex: String?) -> String in
    if currentIndex == nil  {
        return "z"
    }
    return currentIndex!
}

然而,编译器可以从上下文中自动推断出这一点:

let newArray = array1.map { currentIndex -> String in
    if currentIndex == nil  {
        return "z"
    }
    return currentIndex!
}

建议使用空合并运算符??,避免强制解包:

let newArray = array1.map { currentIndex in
    currentIndex ?? "z"
}

更短:

let newArray = array1.map { $0 ?? "z"  }

1

你的代码完全正确,但问题在于你需要在map语句中传递可选参数,像下面这样,然后你的代码就可以完美地工作了。

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接