ios – 完成處理程式在swift 3和Xcode 8中的錯誤
我在Xcode 7.3中使用swift 2.2版本的工作專案.現在我已經更新了Xcode 8並遷移到swift 3.現在我的專案包含錯誤,特別是成功阻止網路的塊.
哪個給出錯誤
Cannot convert value of type '() -> ()' to expected argument type '((URLSessionDataTask, Any?) -> Void)?'
我不明白如何解決這個工作,根據swift 3.
而且還有同樣的錯誤在Facebook登入.
哪個給出錯誤
Cannot convert value of type '(FBSDKLoginManagerLoginResult!, NSError!) -> Void' to expected argument type 'FBSDKLoginManagerRequestTokenHandler!'
和
Cannot convert value of type '(_, _, NSError!) -> Void' to expected argument type 'FBSDKGraphRequestHandler!'
這個所有錯誤都與swift 3中的處理程式塊相關.我不明白錯誤,因此無法解決.任何幫助將不勝感激.提前致謝.
雖然我以前不知道這個錯誤,Xcode想要通知我有關錯誤,但是我已經刪除了型別規範與物件,它的工作.
如
manager.post(methodname, parameters: param, progress: nil, success:{ (dataTask, responseObj) in if let dict : NSDictionary = responseObj as? NSDictionary { print("Response of \(methodname) : \(dict)") if dict.object(forKey: "response") as? String == "success" { CompletionHandler(true, dict) } else { CompletionHandler(false, dict) } } })
這裡關於問題的錯誤在dataTask和responseObj中給出,它們是型別指定的.刪除後,它工作正常.
和facebook登入一樣
@IBAction func fbLoginClicked(_ sender: AnyObject) { let app = UIApplication.shared.delegate as! AppDelegate app.fbLoginManager = FBSDKLoginManager() app.fbLoginManager.logOut() app.fbLoginManager.loginBehavior = FBSDKLoginBehavior.native app.fbLoginManager.logIn(withReadPermissions: ["email"], from: self, handler: { (result, error) -> Void in if error != nil { print(error?.localizedDescription) } else { if (result! as FBSDKLoginManagerLoginResult).isCancelled == true { } else { self.fetchFacebookUserDetail() } } }) }
這裡我也刪除了結果的型別規格和錯誤,解決了問題.並在整個應用程式中遵循這一點,它的工作.我可以執行該專案沒有錯誤,它也正在工作.謝謝.
http://stackoverflow.com/questions/39508868/completion-handlers-error-in-swift-3-and-xcode-8