Swift-y 布尔表达式 - 大小写 if/switch
Swift-y boolean expression - case outside if/switch
要继续到下一个屏幕,patron
必须具有两个标识符之一。我必须执行此操作的代码是:
let identifier1Entered = !patron.identifier1.isEmpty
let identifier2Entered = patron.identifier2 != nil && !patron.identifier2!.isEmpty
guard identifier1Entered || identifier2Entered else { return }
但这不是 Swifty,我正在强制展开可选的 identifier2
,因为我不想将其扩展到更长的时间,IMO 更混乱
var identifier2Entered = false
if let identifier2 = patron.identifier2 where !identifier2.isEmpty {
identifier2Entered = true
}
我认为可能有用的只是从 if
语句中取出表达式,例如:
let id2Entered = let identifier2 = patron.identifier2 where !identifier2.isEmpty
或
let id2Entered = case .Some(let id2) = patron.identifier2 where !id2.isEmpty
但这些表达式似乎只允许在 if
语句中使用。
我想到的另一个更 Swifty 的解决方案是:
let identifier1Entered = !patron.identifier1.isEmpty
guard let id2 = patron.identifier2 where !id2.isEmpty || identifier1Entered
else { return }
但它要求 identifier2 不为 nil,这是不正确的,据我所知,没有办法在 if
或 guard
中使用 ||
的可选绑定声明。更不用说我觉得它不如强制展开更清晰和可读。
有人有更清晰、更 Swifty 的解决方案吗?
使用可选链接的两种可能的解决方案:
let identifier2Entered = patron.identifier2?.isEmpty == false
let identifier2Entered = !(patron.identifier2?.isEmpty ?? true)
如果 patron.identifier2
是 nil
那么 patron.identifier2?.isEmpty
计算结果为 nil
,结果是 false
。
要继续到下一个屏幕,patron
必须具有两个标识符之一。我必须执行此操作的代码是:
let identifier1Entered = !patron.identifier1.isEmpty
let identifier2Entered = patron.identifier2 != nil && !patron.identifier2!.isEmpty
guard identifier1Entered || identifier2Entered else { return }
但这不是 Swifty,我正在强制展开可选的 identifier2
,因为我不想将其扩展到更长的时间,IMO 更混乱
var identifier2Entered = false
if let identifier2 = patron.identifier2 where !identifier2.isEmpty {
identifier2Entered = true
}
我认为可能有用的只是从 if
语句中取出表达式,例如:
let id2Entered = let identifier2 = patron.identifier2 where !identifier2.isEmpty
或
let id2Entered = case .Some(let id2) = patron.identifier2 where !id2.isEmpty
但这些表达式似乎只允许在 if
语句中使用。
我想到的另一个更 Swifty 的解决方案是:
let identifier1Entered = !patron.identifier1.isEmpty
guard let id2 = patron.identifier2 where !id2.isEmpty || identifier1Entered
else { return }
但它要求 identifier2 不为 nil,这是不正确的,据我所知,没有办法在 if
或 guard
中使用 ||
的可选绑定声明。更不用说我觉得它不如强制展开更清晰和可读。
有人有更清晰、更 Swifty 的解决方案吗?
使用可选链接的两种可能的解决方案:
let identifier2Entered = patron.identifier2?.isEmpty == false
let identifier2Entered = !(patron.identifier2?.isEmpty ?? true)
如果 patron.identifier2
是 nil
那么 patron.identifier2?.isEmpty
计算结果为 nil
,结果是 false
。