RxSwift 将 Observable<String> 转换为 String
RxSwift convert Observable<String> into String
我在 RxSwift 中将 Observable 转换为字符串时遇到问题。
我知道 observable 是一个序列,我只想要用户名的最后一次更改。
我将用户名和密码存储为:
let username = BehaviorRelay<String>(value: "")
let password = BehaviorRelay<String>(value: "")
而且之前用过combineLatest
func loginButtonValid(username: Observable<String>, password: Observable<String>) -> Observable<Bool> {
return Observable.combineLatest(username, password)
{ (username, password) in
return username.count > 0
&& password.count > 0
&& self.validateEmail(enteredEmail: username)
}
}
但是我怎样才能从用户名中获取最新的呢?
我试过 takelast 和 combineLatest 只有一个参数,但似乎都不起作用。
我想验证邮箱是否有效,我使用的验证邮箱功能如下(仅供参考):
func validateEmail(enteredEmail:String) -> Bool {
let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,64}"
let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)
return emailPredicate.evaluate(with: enteredEmail)
}
我的尝试围绕着以下思路
func emailValid(username: Observable<String>) -> Observable<Bool> {
return username.takeLast()
{ (lastusername) in
return self.validateEmail(enteredEmail: (lastusername) )
}
}
如果我没理解错的话,你想将 Observable<String>
转换为 Observable<Bool>
,这是 map
方法的工作:
func emailValid(username: Observable<String>) -> Observable<Bool> {
return username.map(self.validateEmail)
}
我在 RxSwift 中将 Observable 转换为字符串时遇到问题。
我知道 observable 是一个序列,我只想要用户名的最后一次更改。
我将用户名和密码存储为:
let username = BehaviorRelay<String>(value: "")
let password = BehaviorRelay<String>(value: "")
而且之前用过combineLatest
func loginButtonValid(username: Observable<String>, password: Observable<String>) -> Observable<Bool> {
return Observable.combineLatest(username, password)
{ (username, password) in
return username.count > 0
&& password.count > 0
&& self.validateEmail(enteredEmail: username)
}
}
但是我怎样才能从用户名中获取最新的呢?
我试过 takelast 和 combineLatest 只有一个参数,但似乎都不起作用。
我想验证邮箱是否有效,我使用的验证邮箱功能如下(仅供参考):
func validateEmail(enteredEmail:String) -> Bool {
let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,64}"
let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)
return emailPredicate.evaluate(with: enteredEmail)
}
我的尝试围绕着以下思路
func emailValid(username: Observable<String>) -> Observable<Bool> {
return username.takeLast()
{ (lastusername) in
return self.validateEmail(enteredEmail: (lastusername) )
}
}
如果我没理解错的话,你想将 Observable<String>
转换为 Observable<Bool>
,这是 map
方法的工作:
func emailValid(username: Observable<String>) -> Observable<Bool> {
return username.map(self.validateEmail)
}