【问题标题】:Return RACSignal method in Swift在 Swift 中返回 RACSignal 方法
【发布时间】:2014-06-13 14:47:09
【问题描述】:

我在 Obj-C 中有以下方法:

- (RACSignal *)fetchCurrentConditionsForLocation:(CLLocationCoordinate2D)coordinate {
    NSString *urlString = [NSString stringWithFormat:@"http://api.openweathermap.org/data/2.5/weather?lat=%f&lon=%f&units=metric", coordinate.latitude, coordinate.longitude];
    NSURL *url = [NSURL URLWithString:urlString];

    return [[self fetchJSONFromURL:url] map:^(NSDictionary *json) {
        return [MTLJSONAdapter modelOfClass:[WXCondition class] fromJSONDictionary:json error:nil];
    }];
}

我对 Swift 的转换:

func fetchJSONFromURL(url: NSURL) -> RACSignal {

}

func fetchCurrentConditionsForLocation(coordinate: CLLocationCoordinate2D) -> RACSignal {
    let urlString = NSString(format: "http://api.openweathermap.org/data/2.5/weather?lat=%f&lon=%f&units=metric", coordinate.latitude, coordinate.longitude)
    let url = NSURL.URLWithString(urlString)

    // Convert to Swift?        
    return [[self fetchJSONFromURL:url] map:^(NSDictionary *json) {
        return [MTLJSONAdapter modelOfClass:[WXCondition class] fromJSONDictionary:json error:nil];
    }];
}

在 Swift 中使用此地图时遇到问题:

return [[self fetchJSONFromURL:url] map:^(NSDictionary *json) {
    return [MTLJSONAdapter modelOfClass:[WXCondition class] fromJSONDictionary:json error:nil];
}];

一切都在正确编译,但有更好的方法吗?

【问题讨论】:

  • 你的 Swift 代码顶部有 import CoreLocation 吗?
  • @dpassage:是的,我只是将它包括在内以解决CLLocationCoordinate2D 错误。我已经更新了我的问题。

标签: objective-c swift racsignal


【解决方案1】:

我没有在项目中尝试过,但也许可以这样做

return fetchJSONFromURL(url).map { (json: NSDictionary) in
    return MTLJSONAdapter.modelOfClass(WXCondition.self, fromJSONDictionary: json, error: nil)
} as RACSignal

【讨论】:

  • 这不起作用,因为map 不是NSDictionary 的成员。我的代码正在运行,我只是不确定这是否是正确的方法。
  • 那么 Objective-C 代码是如何工作的呢?谁将map 添加到NSDictionary
  • 我认为这是一个特殊的RACSignal返回映射。
  • fetchJSONFromURL 在 Objective-C 中返回 NSDictionary 吗?
  • 不,它返回RACSignal
猜你喜欢
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多