将Observable <String>转换为String

时间:2019-07-17 16:14:14

标签: rx-swift

我需要获取可观察对象的字符串内容,并在代码中的其他位置使用它们

将可观察对象转换为字符串

let email = userEmail.map{userEmail return userEmail}

无法将“可观察”类型的值转换为预期的参数类型“字符串”

1 个答案:

答案 0 :(得分:2)

Observable.map将再次将结果值包装在Observable中,因此将不起作用。

仅使用Observable就无法满足您的要求。您必须订阅该值,然后在订阅块中使用它:

userEmail.subscribe(onNext: { userEmail in
    // Do something with `userEmail`.
})

可以Observable<String>替换为BehaviorRelay<String>。它会记住当前值,您可以使用BehaviorRelay.value访问该值。

如果无法将Observable<String>更改为BehaviorRelay<String>,您仍然可以创建一个BehaviorRelay<String?>并将Observable<String>绑定到它:

let userEmailRelay = BehaviorRelay<String?>(value: nil) // Needs to have a value from the beginning.
userEmail
    .map(Optional.init) // Change the type from `Observable<String>` to `Observable<String?>` to match the type of `userEmailRelay`.
    .bind(to: userEmailRelay)

或者,您可能希望以一个空字符串开头,而改为使用BehaviorRelay<String>

let userEmailRelay = BehaviorRelay<String>(value: "")
userEmail.bind(to: userEmailRelay)

最后,访问最新值:

let email = userEmailRelay.value