【问题标题】:Objective C to Swift JSON ParsingObjective C 到 Swift JSON 解析
【发布时间】:2014-11-22 19:00:03
【问题描述】:

如何将这段代码转换成 Swift?

- (void)fetchFeed
{
    NSString *requestString = @"https://bookapi.bignerdranch.com/private/courses.json";
    NSURL *url = [NSURL URLWithString:requestString];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];

    NSURLSessionDataTask *dataTask =
        [self.session dataTaskWithRequest:req
                        completionHandler:
         ^(NSData *data, NSURLResponse *response, NSError *error) {

             NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data
                                                                        options:0
                                                                          error:nil];
             self.courses = jsonObject[@"courses"];

             NSLog(@"%@", self.courses);

             dispatch_async(dispatch_get_main_queue(), ^{
                 [self.tableView reloadData];
             });
         }];
    [dataTask resume];
}

我尝试在此转换它,但 xcode 崩溃

 func fetchFeed(){

        var requestString = "http://bookapi.bignerdranch.com/courses.json"
        var url = NSURL(string: requestString)
        var req = NSURLRequest(URL: url!)

        var dataTask:NSURLSessionDataTask = self._session.dataTaskWithRequest(req, completionHandler: { (data : NSData!, response : NSURLResponse!, error : NSError!) -> Void in

           //var json:NSDictionary = NSJSONSerialization.JSONObjectWithData(data: NSData!, options: NSJSONReadingOptions.allZeros, error: NSError!)

            var json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: NSErrorPointer.null()) as NSDictionary

            self._courses = json["courses"]![0] as NSArray

            println("\(json)")
        })

        dataTask.resume()
    }

问题应该是这一行self._courses = json["courses"]![0] as NSArray 我想它必须是某种带有选项的错误。不知道具体是什么

我该如何解决?请帮帮我

【问题讨论】:

    标签: ios objective-c json swift


    【解决方案1】:

    查看该行的 Objective-C 和 Swift 代码之间的区别:

    // objc
    self.courses = jsonObject[@"courses"];
    
    // swift
    self._courses = json["courses"]![0] as NSArray
    

    您试图在 Swift 中获取数组的第一个元素,而不是数组本身。更改为与您之前的代码匹配:

    self._courses = json["courses"]! as NSArray
    

    【讨论】:

    • 还要确保它是一个数组而不是字典。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多