我需要获取可观察对象的字符串内容,并在代码中的其他位置使用它们
将可观察对象转换为字符串
let email = userEmail.map{userEmail return userEmail}
无法将“可观察”类型的值转换为预期的参数类型“字符串”
答案 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