2016-09-22 2 views
1

Ich versuche, Daten mit AFNetworking & Swift 3.0 und Xcode 8.0 zu analysieren, aber ich bekomme Fehler wie unten.Unterer Code funktioniert gut für schnelle 2.3 aber nicht in 3.0 arbeitenAFNetwoking mit swift 3.0 & xcode 8: POST-Anfrage & GET-Anfrage

Oder wenn jemand weiß über AFNetworking & swift 3.0 mit xcode 8.0 für POST & GET Anfrage bitte sagen Sie mir. mit einem einfachen Beispiel. Dank im Voraus

Sie können unten Fehler sehen.

enter image description here

func callApi(apiName: String, param: [String : AnyObject]?, data: NSDictionary?, withMethod type: String, CompletionHandler:@escaping (_ code: Int, _ error:NSError?, _ response:AnyObject?) -> Void) 

    { 

     MBProgressHUD.showAdded(to: AppDelegateObj.window, animated: true) 
     let str_URL : String = kHOSTPATH+apiName 

     let manager: AFHTTPSessionManager = AFHTTPSessionManager() 

     if (type == kREQ_POST) { 

      manager.POST(str_URL, parameters: param, constructingBodyWithBlock: { (formData: AFMultipartFormData!) in 

       if data?.allValues.count != 0 && data != nil 
       { 

        let fileUrl = NSURL(fileURLWithPath: (data?.valueForKey("filePath"))! as! String) 
        try! formData.appendPartWithFileURL(fileUrl, name: (data?.valueForKey("key"))! as! String) 
       } 

       }, progress: { (NSProgress) in 

       }, success: { (task:URLSessionDataTask, responseObject) -> Void in 

        CompletionHandler(code: 1, error: nil, response:responseObject) 
        MBProgressHUD.hideHUDForView(AppDelegateObj.window, animated: true) 

       }, failure: { (task:URLSessionDataTask?, error:NSError) -> Void in 

        CompletionHandler(code: 0, error: error, response:nil) 
        MBProgressHUD.hideHUDForView(AppDelegateObj.window, animated: true) 
      }) 
     } 
     else { 

      manager.GET(str_URL, parameters: param, progress: { (NSProgress) in 

       }, success: { (task:URLSessionDataTask, responseObject) -> Void in 

        CompletionHandler(code: 1, error: nil, response:responseObject) 
        MBProgressHUD.hideHUDForView(AppDelegateObj.window, animated: true) 

       }, failure: { (task:URLSessionDataTask?, error:NSError) -> Void in 

        CompletionHandler(code: 0, error: error, response:nil) 
        MBProgressHUD.hideHUDForView(AppDelegateObj.window, animated: true) 
      }) 
     } 
    } 

aber ich bin immer Fehler wie diese von NSError

cannot convert the value of type (URLSessionDataTask?,NSError)->Void to expected argument type '((URLSessionDataTask?,NSError)->Void)?' 
+0

Bitte beachten Sie den Link (http://stackoverflow.com/questions/39508868/completion-handlers- error-in-swift-3-und-xcode-8), die Ihnen helfen wird. –

Antwort

1

Ändern Sie Ihre Art Fehler Fehler. Typ-Kompatibilität geändert von Swift2.3 zu Swift 3.0

0

Try this:

func Get() 
{ 
    let url = NSURL(string: Webserive.UserProfileInfoList + "/" + String(300)) 
    let request = NSURLRequest(url: url! as URL) 

    NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main) {(response, data, error) in 
     self.GetData(data: data! as NSData) 
    } 
} 

func GetData(data:NSData){ 

    let dict: NSDictionary!=(try! JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary 
    print(dict) 
    self.PostData() 
} 

func PostData(){ 

    let parameters : NSMutableDictionary? = [ 

     "UserID": String(300), 
     "UserProfileID": String(356)] 

     let manager = AFHTTPSessionManager() 

     let serializerRequest = AFJSONRequestSerializer() 
     serializerRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
     manager.requestSerializer = serializerRequest 

     let serializerResponse = AFJSONResponseSerializer() 
     serializerResponse.readingOptions = JSONSerialization.ReadingOptions.allowFragments 
     serializerResponse.acceptableContentTypes = ((((NSSet(object: "application/json") as! Set<String>) as Set<String>) as Set<String>) as Set<String>) as Set<String>; 
     manager.responseSerializer = serializerResponse 
     manager.post(Webserive.DefaultProfile, parameters: parameters, progress: nil, success: { (task: URLSessionDataTask, responseObject: Any?) in 
     if (responseObject as? [String: AnyObject]) != nil { 

      print("responseObject \(responseObject)") 
     } 
    }) { (task: URLSessionDataTask?, error: Error) in 
     print("POST fails with error \(error)") 
    } 
} 
0

Ich hatte ähnliches Problem. Sie wissen nicht, was die Wurzel des Problems ist, aber Sie können ihnen helfen, indem sie nicht, einige Parameter des Typs, in diesem Fall ‚Fehler‘ in POST-Methode Aufruf Angabe:

manager.post("http://...", parameters: [:], progress: nil, success: { (operation: URLSessionDataTask, responseObject: Any?) in 
    print("Success") 
}, failure: { (operation: URLSessionDataTask?, error) in 
    let error = error as? Error 
    print("Failure, error is \(error?.description)") 
}) 

Mit diesem Codemuster ich den Code bauen mit Xcode 8.3 und Swift 3.


EDIT:

Wenn Sie ein Problem mit haben "Can not Wert vom Typ umwandeln ...", überprüfen Sie bitte, dass Funktion erwartet ein.

Mein Problem war, dass ich als CoreData eine Fehlererklärung hatte und AFNetworking diesen Fehlertyp sicher nicht zurückgibt.

class Error: NSManagedObject { 
// Insert code here to add functionality to your managed object subclass 
} 

Was ich ändern musste:

(operation: URLSessionDataTask?, error: Error?) 

zu:

(operation: URLSessionDataTask?, error: Swift.Error?)