public func fetchAllRooms(completion: ([RemoteRoom]?) -> Void) {
let url = NSURL(string: "http://localhost:5984/rooms/_all_docs?include_docs=true")!
let urlRequest = NSMutableURLRequest(
URL: url,
cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData,
timeoutInterval: 10.0 * 1000)
urlRequest.HTTPMethod = "GET"
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
let task = urlSession.dataTaskWithRequest(urlRequest)
{ (data, response, error) -> Void in
guard error == nil else {
print("Error while fetching remote rooms: \(error)")
completion(nil)
return
}
guard let json = try? NSJSONSerialization.JSONObjectWithData(data!,
options: []) as? [String: AnyObject] else {
print("Nil data received from fetchAllRooms service")
completion(nil)
return
}
guard let rows = json["rows"] as? [[String: AnyObject]] {
print("Malformed data received from fetchAllRooms service")
completion(nil)
return
}
var rooms = [RemoteRoom]()
for roomDict in rows {
rooms.append(RemoteRoom(jsonData: roomDict))
}
completion(rooms)
}
task.resume()
}
私はSwiftでかなり新しいです。このコードスニペットを理解するのを助けてください
fetchAllRooms
関数は、パラメータアレイRemoteRoomを取り、voidを返す名完了と別の機能を取ります。
は今終わり、完了ブロックは(構文はObjective Cの中のブロックのコールバックのように思える)パラメータRemoteRoomと呼ばなっています。 RemoteRoomは&完了ブロックが初期化され、completion(rooms)
と呼ばれています。しかし、完成ブロックの本体はどこにありますか?行:completion(rooms)
が実行されたときに実行される行は何ですか?あなたはその関数を呼び出すときcompletion
の
すごくおかげで総合的な答えを@vacawwama。私が持っている質問のカップル。 "//クロージャを渡す"& "//同じクロージャのシンタックスと比較する"クロージャを使用する場合と後続のクロージャを使用する場合どんな特定の事件?なぜこれがキーワードの中で使われていますか?入力パラメータ?なぜこの$ 0が使われたのですか?入力パラメータを表すために使用されている場合は、 "{(data、response、error) - > Void in"という行に何が表示されますか? – user804417
@ user804417のように、最後のパラメータがクロージャを受け取る場合は、通常、後続のクロージャ構文を使用します。 'in'キーワードは、引数をクロージャ本体から分離します。 '$ 0'は最初のパラメータを表します。 3つのパラメータがある場合は、 '$ 0'、' $ 1'、 '$ 2'を使います。 – vacawama
ありがとうございますサー!今は明瞭です! – user804417