Swift中如何为可选类型实现无需解包的计算属性?
Swift可选类型计算属性的优雅实现
针对你提出的UITextField子类验证需求,确实有更简洁的写法,无需繁琐的if-let解包:
首先看你当前的代码逻辑:当text不为nil时返回字符串是否为空,text为nil时返回false。可以直接用可选链+空合运算符简化:
var hasValue: Bool { text?.isEmpty ?? false }
不过这里要注意,你的原逻辑其实和“判断是否存在有效值”的需求可能不符——比如当text是空字符串""时,这个属性会返回true,但空字符串通常不算有效值。如果你的真实需求是判断text不为nil且不是空字符串,更合理的写法是:
var hasValidValue: Bool { text?.isEmpty == false }
原理很简单:text?.isEmpty在text为nil时返回nil,而nil == false的结果是false;只有当text非nil且isEmpty为false时,整个表达式才会返回true,完美匹配“存在有效值”的验证逻辑。
如果想让所有可选字符串都复用这个逻辑,可以给Optional写个扩展:
extension Optional where Wrapped == String { var hasNonEmptyValue: Bool { self?.isEmpty == false } }
之后在UITextField子类里就能直接这么用:
var hasValue: Bool { text.hasNonEmptyValue }
内容的提问来源于stack exchange,提问作者Svetoslav Popov
相关产品推荐
相关产品推荐

