首页 > 解决方案 > 如何在 RxSwift 中打印订阅的字典值?

问题描述

我有一个Observable返回一个dictionary

func myFunc() -> Observable<[String : MyClass]> {
    return service.getDictionary()
}

我如何获得keysand values

viewModel.myFunc().subscribe(onNext: {
    print("", $0 )
}).disposed(by: disposeBag)

没有类似.keyor的属性.value。我使用map或者flatMap它是如何工作的?

标签: iosswiftdictionaryrx-swift

解决方案


RxSwift 5.0 测试

    func myFunc() -> Observable<[String : String]> {
        let dict:[String:String] = ["key0": "value0", "key1": "value1", "key2": "value2","key3" : "value3"]
        return Observable.just(dict)
    }


    myFunc()
    .map { (dict) -> [(String,String)] in
            let keys = Array(dict.keys)
            var key_value_array = Array<(String,String)>()
            for key in keys {
                let key_value_tuple = (key,dict[key]!)
                key_value_array.append(key_value_tuple)
            }

        return key_value_array
    }.flatMap { Observable.from($0) }
        .subscribe(onNext: { (tuple) in
        print("Key is \(tuple.0)")
        print("Value is \(tuple.1)")
    }).disposed(by: disposeBag)

然后登录控制台是

Key is key0
Value is value0
Key is key1
Value is value1
Key is key3
Value is value3
Key is key2
Value is value2

推荐阅读