比方说,我有三个可选的字符串,string1,string2,和string3。我不知道哪一个不是(如果有的话),nil所以我正在使用if-let语句,然后我想对那个非null的字符串做一些事情,而不管它是哪个。
现在,这可以在Swift中使用,但是很麻烦:
if let newString = string1 {
doSomething()
} else if let newString = string2 {
doSomething()
} else if let newString = string3 {
doSomething()
}
Run Code Online (Sandbox Code Playgroud)
我可以做类似的事情(这给我一个错误):
if let newString = string1 || let newString = string2 || let newString = string3 {
doSomething()
}
Run Code Online (Sandbox Code Playgroud)
解决方案1:
if let newString = [string1, string2, string3].compactMap({$0}).first {
print(newString)
}
Run Code Online (Sandbox Code Playgroud)
该compactMap函数将生成一个非空值数组,您将获取first它的值
解决方案2:
if let newString = [string1, string2, string3].first(where: {$0 != nil}) {
print(newString)
}
Run Code Online (Sandbox Code Playgroud)
注意:正如@Connor和@vacawama提出的出色解决方案所建议的那样,上述解决方案将生成一个double可选(第一个可选项来自可选数组,然后该first函数构成第二个可选项)。可以通过以下任一方法解决此问题:
if let newString = [str1, str2, str3].first(where: {$0 != nil}) as? String {
if let newString = [str1, str2, str3].first(where: {$0 != nil}) ?? nil {
if case let newString?? = [str1, str2, str3].first(where: {$0 != nil}) {
if let first = [str1, str2, str3].first(where: { $0 != nil }), let newString = first
解决方案3:
(这不会扩展,坦率地说,这很奇怪)
if let newString = string1 ?? string2 ?? string3 {
print(newString)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |