この同じ問題について他のいくつかの質問を読みましたが、どういうわけか、完了ハンドラーは他の回答とは異なります。また、これらの回答は2015年のものであるため、Swift 1.xに固有のものであるかどうか疑問に思います
とにかく、ここに私の問題があります。通常の GET 呼び出しを行っており、ダウンロードしたデータを呼び出し元のメソッドに返したいと考えています。どういうわけか、これは私にとってはうまくいきたくありません。
これが私がやっていることのコードです(すべて単一のViewControllerクラス内にあります):
override func viewDidLoad() {
super.viewDidLoad()
// get initial GET call
getConfigurationLink();
}
func getConfigurationLink(completionHandler:String?) -> Void
{
let collectionUrl = NSURL(string: collectionUrlString);
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration();
let headers: [NSObject : AnyObject] = ["Accept":"application/json"];
configuration.HTTPAdditionalHeaders = headers;
let session = NSURLSession(configuration: configuration);
let configurationUrlTask = session.dataTaskWithURL(collectionUrl!) {(data, response, error) in
completionHandler("test")
}
configurationUrlTask.resume()
}
このコードでは、 の行がcompletionHandler("test")
コンパイルに失敗し、Cannot call value of non-function type String?
メッセージが表示されます。
だから私の質問は:
メソッドに引数として渡すことができる conpletionHandler を作成するにはどうすればよいですか?
完了ハンドラが失敗するのはなぜですか?
完了ハンドラーがない場合、予想どおり、メソッドはネットワーク呼び出しが完了する前に null 値を返すだけです。
ありがとう。