RxSwift将Observable <String>转换为String

时间:2019-08-16 09:37:44

标签: swift observable rx-swift

RxSwift在将Observable转换为String时遇到问题。

我了解一个可观察对象是一个序列,我只想要用户名中的最后一个更改。

我将用户名和密码存储为:

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) )
        }
}

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您想将<?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Company.Afis.ImageContainer" publicKeyToken="97cac07b8409e999" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.5.0.1827" newVersion="2.5.0.1827" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> 转换为Observable<String>,这是Observable<Bool>方法的工作:

map