要继续下一个屏幕,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的解决方案吗?
答案 0 :(得分:1)
使用可选链接的两种可能解决方案:
let identifier2Entered = patron.identifier2?.isEmpty == false
let identifier2Entered = !(patron.identifier2?.isEmpty ?? true)
如果patron.identifier2
为nil
,那么patron.identifier2?.isEmpty
评估结果为nil
,结果会得到false
。