【问题标题】:Converting Reactive Cocoa doNext^ to Swift将反应性 Cocoa doNext^ 转换为 Swift
【发布时间】:2014-08-05 06:21:41
【问题描述】:

我有以下 Obj-C 方法:

- (RACSignal *)updateCurrentConditions {
    return [[self.client fetchCurrent:self.coordinate] doNext:^(WXCondition *condition) {
        self.currentCondition = condition;
    }];
}

我正试图弄清楚如何将其转换为 Swift,但我不确定如何正确返回它。

我该怎么做:

[[self.client fetchCurrent:self.coordinate] doNext:^(WXCondition *condition) {}];?

func updateCurrentConditions() -> RACSignal {
    return client.fetchCurrent(coordinate: coordinate) {
        currentCondition = condition
    }
}

这里是ReactiveCocoa 的链接以及有关-doNext: 的信息

【问题讨论】:

    标签: objective-c closures block swift reactive-cocoa


    【解决方案1】:

    你可以试试这个:

    func updateCurrentConditions() -> RACSignal {
      let fetchSignal = client.fetchCurrent(coordinate: coordinate)
      return fetchSignal.doNext(block: {condition: WXCondition? -> Void in
        let wxCondition = condition as WXCondition
        currentCondition = wxCondition
      })
    }
    

    【讨论】:

      【解决方案2】:

      fetchCurrent 方法返回一个 RACSignal。另外,doNext 将id 作为方法参数,所以我猜你需要强制转换:

      func updateCurrentConditions() -> RACSignal {
          let fetchSignal = client.fetchCurrent(coordinate: coordinate)
          return fetchSignal.doNext(condition) {
              let wxCondition = condition as WXCondition
              currentCondition = wxCondition
          }
      }
      

      【讨论】:

      • 这看起来是正确的方法,但是condition 呢?
      • 另外,doNext 不是RACSignal 的成员,所以我认为它也不能正常工作。
      • 你看到我的cmets了吗?
      猜你喜欢
      • 1970-01-01
      • 2017-01-27
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      相关资源
      最近更新 更多