快速将Objective-C块转换为闭包

富尔维奥

我已成功将以下方法从Obj-C转换Swift

在学习了如何Swift中使用闭包替换块之后

对象:

- (RACSignal *)fetchCurrentConditionsForLocation:(CLLocationCoordinate2D)coordinate {
    NSString *urlString = [NSString stringWithFormat:@"http://api.openweathermap.org/data/2.5/weather?lat=%f&lon=%f&units=imperial", 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];
    }];
}

迅速:

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)

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

但是,我无法将以下返回映射块转换为Swift

在此处输入图片说明

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

    /* Original Obj-C:

    return [[self fetchJSONFromURL:url] map:^(NSDictionary *json) {
        RACSequence *list = [json[@"list"] rac_sequence];
            return [[list map:^(NSDictionary *item) {
                return [MTLJSONAdapter modelOfClass:[WXCondition class] fromJSONDictionary:item error:nil];
            }] array];
        }];
    }
     */

    // My attempt at conversion to Swift
    // (I can't resolve `rac_sequence` properly). Kind of confused
    // as to how to cast it properly and return
    // it as an "rac_sequence" array.

    return fetchJSONFromURL(url).map { json in
        let list = RACSequence()
        list = [json["list"] rac_sequence]
        return (list).map { item in {
            return MTLJSONAdapter.modelOfClass(WXCondition.self, fromJSONDictionary: item as NSDictionary, error: nil)
        } as NSArray
    }
}

如果有帮助,这是什么rac_sequence

- (RACSequence *)rac_sequence {
    return [RACArraySequence sequenceWithArray:self offset:0];
}

RACArraySequence()

+ (instancetype)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset;

编辑: fetch方法返回一个RACSignal而不是NSArray

func fetchJSONFromURL(url: NSURL) -> RACSignal {

}
克里斯蒂安·迪·洛伦佐(Christian Di Lorenzo)

看起来您只是忘记了函数声明中的返回类型。声明应如下所示:

func fetchHourlyForecastForLocation(coordinate: CLLocationCoordinate2D) -> RACSignal { //...rest of function

因为返回类型现在已命名,所以您可以as NSArray在函数末尾的return语句中删除强制类型转换希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

快速将Objective-C块转换为闭包

来自分类Dev

将Objective-C块转换为Swift闭包

来自分类Dev

将Objective-C块转换为Swift闭包

来自分类Dev

将快速闭包转换为块

来自分类Dev

将Swift 2闭包转换为Objective-C块

来自分类Dev

将Objective-C块变量转换为Swift闭包变量?

来自分类Dev

如何将Objective-C块转换为Swift闭包?

来自分类Dev

将回调/闭包从 Objective C 转换为 Swift

来自分类Dev

在Objective-C中将闭包(Swift)转换为闭包(block?)

来自分类Dev

SWIFT闭包语法-从Objective C转换

来自分类Dev

快速将NSTimeInteval转换为NSDate

来自分类Dev

快速将字典值转换为类型

来自分类Dev

无法快速将NSData转换为NSString

来自分类Dev

快速将时间转换为时间

来自分类Dev

快速将AnyObject强制转换为Block

来自分类Dev

快速将数字转换为文本

来自分类Dev

如何快速将Int转换为int?

来自分类Dev

如何快速将NSURL转换为CFURL?

来自分类Dev

快速将NSData转换为sockaddr结构

来自分类Dev

快速将枚举转换为NSNumber

来自分类Dev

快速将NSNumber的对象转换为Double

来自分类Dev

如何快速将UInt转换为Int?

来自分类Dev

如何快速将PFFile转换为UIImage?

来自分类Dev

快速将[String?]转换为[String!]

来自分类Dev

快速将CGMutablePath转换为MKPolygon

来自分类Dev

快速将Int []转换为Int变量

来自分类Dev

快速将单个c char转换为字符串

来自分类Dev

如何快速将Objc c Enum转换为NSValue

来自分类Dev

从Objective-c快速进行块转换