1

そのため、Ray Wenderlich の Swifty JSON チュートリアルからいくつかのコードをコピーして貼り付けましたが、私が行っている呼び出しの一部を理解できませんでした。

SwiftyJSON ライブラリをスキャンし、開発者サイトの NSURL の説明を見て、Swift ガイドをチェックアウトしましたが、見つからないか、さまざまな情報が返ってきました。

これらのサクセス コールは何を意味するのでしょうか?

    func getIndexWithSuccess(success: ((indexData: NSData!) -> Void)) {
        loadDataFromURL(NSURL(string: url)!, completion:{(data, error) -> Void in
            if let urlData = data {
                /* HERE */
                success(indexData: urlData)
            }
        })
    }

    func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) {
        var session = NSURLSession.sharedSession()

        let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
            if let responseError = error {
                completion(data: nil, error: responseError)
            } else if let httpResponse = response as? NSHTTPURLResponse {
                if httpResponse.statusCode != 200 {
                    var statusError = NSError(domain:"com.raywenderlich",
                        code:httpResponse.statusCode,
                        userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."])
                    completion(data: nil, error: statusError)
                } else {
                    completion(data: data, error: nil)
                }
            }
        })
        loadDataTask.resume()
    }
}
4

1 に答える 1

0

次のように書かれていることに注意してください。

func getIndexWithSuccess(success: ((indexData: NSData!) -> Void)) {

つまり、成功はパラメーターです。コロンの後に続くのはクロージャーです。

success、したがって、閉鎖です。

では、その閉鎖をどのように解釈すればよいでしょうか。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

上記のクロージャーには、わかりやすくするためにいくつかの余分な括弧が含まれていることに注意してください。

上記を削除して短くすることができます:

func getIndexWithSuccess(success: (indexData: NSData!) -> Void) {

その他の役立つリンク:

http://fuckingclosuresyntax.com

http://fuckingswiftblocksyntax.com

編集:

おそらく、このコンテキストで最も明確な説明は、次のように並べ替えることです。

func getIndexWithSuccess(
    success: (
        data: [DoctorModel]
    )->(
        Void
    ),
    moreInfo: String = "This is another parameter, but the trailing closure technique wont work"
) {

上記に準じます。ただし、moreInfo パラメータも true です。トレーリング クロージャは機能しません。クロージャーが最後になるようにパラメーターを再配置することで、トレーリング クロージャー手法を使用できます。

于 2015-04-22T19:06:03.107 に答える