Swift String扩展isNotEmpty属性遇编译错误,求正确实现方案
问题解决步骤
1. 修正String扩展的拼写错误
你的String扩展里把isEmpty拼写成了iEmpty,这是第一个编译错误的根源,修正后的扩展代码如下:
extension String { var isNotEmpty: Bool { return !isEmpty } }
2. 处理可选字符串的布尔运算问题
email和password是可选类型String?,通过可选链调用isNotEmpty会返回Bool?(可选布尔值),Swift不允许直接对两个Bool?使用&&运算符,以下是两种可行的解决方式:
方式一:用空合运算符转换可选布尔值
将nil的情况视为false(邮箱或密码为nil时表单必然不合法),修正formIsValid计算属性:
struct LogInViewModel { var email: String? var password: String? var formIsValid: Bool { return (email?.isNotEmpty ?? false) && (password?.isNotEmpty ?? false) } }
方式二:给可选String扩展专属的isNotEmpty属性
直接给限定Wrapped为String的Optional添加isNotEmpty属性,返回非可选布尔值,这样可选字符串可直接调用该属性:
extension Optional where Wrapped == String { var isNotEmpty: Bool { return self?.isEmpty == false } } struct LogInViewModel { var email: String? var password: String? var formIsValid: Bool { return email.isNotEmpty && password.isNotEmpty } }
内容的提问来源于stack exchange,提问作者IsaacNewtonGravity
相关产品推荐
相关产品推荐

