2016-01-08 275 views
1

使用AFNetworking接收响应我是新来AFNetworking,我试图按照Raywenderlich在同教程。所以我得到了JSON解析的代码,我正在努力将它转换为Swift。我已经尝试了许多教程和StackOverflow答案,但找不到一个很好的解释。斯威夫特

- (IBAction)jsonTapped:(id)sender 
{ 
    // 1 
    NSString *string = [NSString stringWithFormat:@"%@weather.php?format=json", BaseURLString]; 
    NSURL *url = [NSURL URLWithString:string]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

    // 2 
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    operation.responseSerializer = [AFJSONResponseSerializer serializer]; 

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

     // 3 
     self.weather = (NSDictionary *)responseObject; 
     self.title = @"JSON Retrieved"; 
     [self.tableView reloadData]; 

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

     // 4 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Weather" 
                  message:[error localizedDescription] 
                  delegate:nil 
                cancelButtonTitle:@"Ok" 
                otherButtonTitles:nil]; 
     [alertView show]; 
    }]; 

    // 5 
    [operation start]; 
} 

那么,任何人都可以帮助我解析数据的基础知识与AFNetworking

回答

2

的问题是,为什么你与ObjcSwift去。有许多框架替代AFNetworking

事实上,同一开发商开发了网络库Swift命名为Alamofire

您可以使用该框架,并得到同样的回应:

这里是它的演示的例子!

func postWebserviceWithURL(strUrl: String, param: NSDictionary?, completionHandler: (NSDictionary?, NSError?) ->()) ->(){ 

     Alamofire.request(.POST, strUrl, parameters: param as? [String : AnyObject], encoding: ParameterEncoding.URL).responseJSON { response in 

      switch response.result { 

      case .Success(let data): 
       let json = data as? NSDictionary 
       completionHandler(json, nil) 
      case .Failure(let error): 
       completionHandler(nil, error) 
       self.showSingleAlert("app_name", message: error.localizedDescription) 
      } 
     } 
    } 
+0

那么它是否提供了与AFNetworking相同的功能? –

+0

当然,几乎相同。你只需要确定它的方法,你就准备好了! @KamalaDash –

+0

另一个问题,如果我们要参加NSUrlSession和默认网络类而不是第三方特别是Alamofire/AFNetworking,有什么优势? –

2

是的,你可以很容易地使用AFnetworking库中的所有您需要创建桥接-Header.h文件并导入AFNetworking.h到您的迅速拳头桥接-Header.h文件

及以下试试这个代码到你的json方法中

let urlAsString = "<Your json URL in string>" 
     let manager = AFHTTPRequestOperationManager() 
     manager.POST(
      urlAsString, 
      parameters: <Parameter>, 
      success: { (operation: AFHTTPRequestOperation!, 
       responseObject: AnyObject!) in 
print("JSON: " + responseObject.description) 
}, 
failure: { (operation: AFHTTPRequestOperation! 
    error: NSError!) in 
    } 
)