2017-04-04 4 views
0

私のコードをswift 3に変換していますが、次のコードで "文の型があいまいである"エラーが発生します。式の型がdataTaskに文脈がなくてもあいまいです

open class func performGetRequest(_ targetURL: URL!, completion: @escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: NSError?) -> Void) { 

    var request = URLRequest(url: targetURL) 
    request.httpMethod = "GET" 
    let sessionConfiguration = URLSessionConfiguration.default 
    let session = URLSession(configuration: sessionConfiguration) 
    let task = session.dataTask(with: request) { (data, response, error) in 
     DispatchQueue.main.async(execute: { 
      completion(data, response.statusCode,error) 
     }) 
    } 
    task.resume() 
} 

答えて

1

ErrorNSErrorではありません。スウィフト3でさらに

完了ハンドラ内のパラメータラベルを省略し、あなたが実際に非オプションを意味する場合IUO *パラメータを渡すことはありません。

open class func performGetRequest(_ targetURL: URL, completion: @escaping (Data?, Int, Error?) -> Void) { 

最後に、あなたがこのケースでURLRequestを必要としません。 GETがデフォルトであるため、URLをdataTaskに渡して、リクエストに関連する2行を削除してください。

(*)暗黙のアンラップオプション

1

最初response.statusCodeあなたのコードに2つの問題があり、応答がURLResponseのタイプであり、それは財産statusCodeを持っていないので、あなたはstatusCodeを取得するためにHTTPURLResponseにキャスト入力する必要があります。 2番目はSwift 3からNSErrorの代わりにネイティブErrorを使用しているので、全体のコードはこのようになります。

open class func performGetRequest(_ targetURL: URL!, completion: @escaping (_ data: Data?, _ HTTPStatusCode: Int, _ error: Error?) -> Void) { 

    var request = URLRequest(url: targetURL) 
    request.httpMethod = "GET" 
    let sessionConfiguration = URLSessionConfiguration.default 
    let session = URLSession(configuration: sessionConfiguration) 
    let task = session.dataTask(with: request) { (data, response, error) in 
     DispatchQueue.main.async(execute: { 
      completion(data, (response as! HTTPURLResponse).statusCode,error) 
     }) 
    } 
    task.resume() 
} 
関連する問題