【发布时间】:2016-12-24 14:11:06
【问题描述】:
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) 被执行时要执行的行是什么。
【问题讨论】:
标签: ios swift callback completionhandler