我有一个可观察的对象,它管理一个名为 Profile 的对象:
class Profile {
let name. : String
let surname : String
let avatar: String?
}
Observable<Profile>
此可观察对象绑定(bind)到 View 模型, View 模型同时具有一个名为
的可观察属性var initialMarks:Observable<String>
这是名字和姓氏属性的首字母。如果 avatar 属性为零,则会显示此首字母。
我有一个返回字符串中首字母的函数:
func initialLetters(first:String, second: String) -> String
如何通过使用 RxSwift 任何运算符来实现此目的:
- 访问头像属性。
- 检查是否为零。
- 如果为零,则调用函数initialLetters。
- 将函数initialLetters绑定(bind)到可观察的initialLetters。
非常感谢。
最佳答案
这只是一个简单的映射...
这里是它自己的 View 模型。
func initialMarks(for profile: Observable<Profile>) -> Observable<String> {
return profile
.compactMap { profile in
if profile.avatar == nil {
return initialLetters(first: profile.name, second: profile.surname)
}
else {
return nil
}
}
}
如果你想将它嵌入到 View 模型结构/类中,你可以这样做:
struct ViewModel {
let profile: Observable<Profile>
var initialMarks: Observable<String> {
return profile
.map { profile in
if profile.avatar == nil {
return initialLetters(first: profile.name, second: profile.surname)
}
else {
return ""
}
}
}
}
此外,上面的两个实现根据您想要的内容略有不同...在第一个实现中,它仅在头像为零时发出缩写,第二个实现在头像存在时发出空字符串,或者在头像存在时发出缩写为零。
关于ios - 将 RxSwift 可观察结果绑定(bind)到另一个可观察结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58797756/