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()
}
Je suis assez nouveau dans Swift.S'il vous plaît, aidez-moi à comprendre cet extrait de code
fetchAllRooms
fonction prend une autre fonction avec l'achèvement du nom, qui prend un tableau de paramètres RemoteRoom et renvoie void. Maintenant, à la fin, le bloc d'achèvement (la syntaxe ressemble à un rappel de bloc dans Objective c) est appelé avec un paramètre RemoteRoom. RemoteRoom est initialisé & Le bloc d'achèvement est appelé completion(rooms)
. Mais où est le corps du bloc d'achèvement? Quelles sont les lignes à exécuter lorsque la ligne completion(rooms)
est exécutée?
Merci pour Awesomely réponse complète @vacawwama. Couple de questions que j'ai. Si je compare "// passer une fermeture" et "// même avec la syntaxe de clôture" quand utiliser la fermeture et quand utiliser la fermeture arrière? un cas particulier? Pourquoi utilise-t-on ce mot-clé? Paramètre d'entrée? Pourquoi ce $ 0 utilisé pour? Si utilisé pour représenter le paramètre d'entrée, qu'en est-il de la ligne de la question "{(data, response, error) -> Void in". – user804417
@ user804417, vous utilisez généralement la syntaxe de fermeture arrière si le dernier paramètre prend une fermeture. Le mot clé 'in' sépare les arguments du corps de fermeture. '$ 0' représente le premier paramètre. Si vous avez 3 paramètres, alors vous utiliserez '$ 0',' $ 1', et '$ 2'. – vacawama
Merci beaucoup Monsieur! C'est limpide maintenant! – user804417