ios - 将 RxSwift 可观察结果绑定(bind)到另一个可观察结果

标签 ios rx-swift

我有一个可观察的对象,它管理一个名为 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 任何运算符来实现此目的:

  1. 访问头像属性。
  2. 检查是否为零。
  3. 如果为零,则调用函数initialLetters。
  4. 将函数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/

相关文章:

ios - 没有声音问题会终止设备上所有应用程序的音频

iphone - 当我向 AppStore 提交应用程序更新时,更新配置文件是否会影响钥匙串(keychain)访问?

ios - 创建可观察数组后在 RxSwift 中使用 zip 运算符

ios - 没有 onNext 的 observer.onComplete() 如何在 flatmap 链中工作? - 它必须跳过所有以下平面图,对吗?

swift - RxCocoa 调用中的额外参数

swift - Rx swift : Completing observable sequence of unknown length

ios - controllerDidChangeContent 核心数据严重应用错误

ios - 为什么我的图像没有显示在 UIImageView 中?

iphone - 自定义 TabBar 上的突出显示图像

swift - RxSwift 使用 RxCocoa 与动画绑定(bind)