gpt4 book ai didi

swift - 有没有办法使用相同的变量名链接多个 if-let 语句?

转载 作者:搜寻专家 更新时间:2023-10-30 22:10:06 26 4
gpt4 key购买 nike

假设我有三个可选字符串,string1string2string3。我不知道哪个(如果有的话)不是 nil 所以我正在使用 if-let 语句,然后我想用那个非 nil String 做一些事情,不管这是其中的一个。

现在,这在 Swift 中有效,但很麻烦:

if let newString = string1 {
doSomething()
} else if let newString = string2 {
doSomething()
} else if let newString = string3 {
doSomething()
}

我可以做类似的事情吗(这会给我一个错误):

if let newString = string1 || let newString = string2 || let newString = string3 {
doSomething()
}

最佳答案

解决方案 1:

if let newString = [string1, string2, string3].compactMap({$0}).first {
print(newString)
}

compactMap 函数将生成一个非空值数组,您将获取它的第一个

解决方案 2:

if let newString = [string1, string2, string3].first(where: {$0 != nil}) {
print(newString)
}

注意:正如@Connor 和@vacawama 的出色解决方案所建议的那样,上述解决方案将生成一个双可选(第一个可选来自可选数组,然后是 first 函数有助于第二个可选)。这可以通过以下任一方式解决:

  1. 如果让 newString = [str1, str2, str3].first(where: {$0 != nil}) 作为?字符串 {

  2. if let newString = [str1, str2, str3].first(where: {$0 != nil}) ??无 {

  3. if case let newString?? = [str1, str2, str3].first(其中:{$0 != nil}) {

  4. if let first = [str1, str2, str3].first(where: { $0 != nil }), let newString = first

解决方案 3:

(这不会扩展,坦率地说这很奇怪)

if let newString = string1 ?? string2 ?? string3 {
print(newString)
}

关于swift - 有没有办法使用相同的变量名链接多个 if-let 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com