2016-01-08 273 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 
    } 
)