【问题标题】:How do I print subscribed dictinary value in RxSwift?如何在 RxSwift 中打印订阅的字典值?
【发布时间】:2020-05-12 14:42:31
【问题描述】:

我有一个Observable,它返回一个dictionary

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

如何获取keysvalues

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

没有像.key.value 这样的属性。我是使用map 还是flatMap 或者它是如何工作的?

【问题讨论】:

  • 您知道Observables 代表事物的序列吗?所以Observable&lt;[String: MyClass]&gt; 代表一个字典序列。您是否将其误解为键值对序列?
  • 对,所以 .flatMap {Observable.from($0)} 会得到键值对的序列。但是,我如何从那里获取值?就像打印出所有的键和它们的关联值一样。
  • 如果我理解正确,你会想要flatMap { Obserable.from(Array($0)) }。在那之后,你可以做你在问题中所做的事情。 subscribeprint.

标签: ios swift dictionary rx-swift


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多