Swift:从dispatch_async内部返回一个结果
Swift: Returning a result from inside dispatch_async
所以我这里有一段代码不起作用。这是因为它在尝试解包可选值时发现 nil。这是因为它在异步方法中被初始化。我的问题是,如何在函数获取结果之前推迟返回函数?
struct Domain {
var name: String?
var tld: String?
var combined: String {
get {
return self.name!+self.tld!
}
}
var whoIs: String {
get {
if self.whoIs.isEmpty {
var result: String?
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let whois_url = NSURL(string: SEARCH_URL+self.combined+"/whois")
result = NSString(contentsOfURL: whois_url!, encoding: NSUTF8StringEncoding, error: nil)
print(result!)
})
return result!
}
return self.whoIs
}
}
}
如果您想等待块的结果,只需将 dispatch_async
替换为 dispatch_sync
:
dispatch_sync(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let whois_url = NSURL(string: SEARCH_URL+self.combined+"/whois")
result = NSString(contentsOfURL: whois_url!, encoding: NSUTF8StringEncoding, error: nil)
print(result!)
})
这将确保该方法不会 return 直到 URL 的内容被提取到结果中。
所以我这里有一段代码不起作用。这是因为它在尝试解包可选值时发现 nil。这是因为它在异步方法中被初始化。我的问题是,如何在函数获取结果之前推迟返回函数?
struct Domain {
var name: String?
var tld: String?
var combined: String {
get {
return self.name!+self.tld!
}
}
var whoIs: String {
get {
if self.whoIs.isEmpty {
var result: String?
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let whois_url = NSURL(string: SEARCH_URL+self.combined+"/whois")
result = NSString(contentsOfURL: whois_url!, encoding: NSUTF8StringEncoding, error: nil)
print(result!)
})
return result!
}
return self.whoIs
}
}
}
如果您想等待块的结果,只需将 dispatch_async
替换为 dispatch_sync
:
dispatch_sync(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let whois_url = NSURL(string: SEARCH_URL+self.combined+"/whois")
result = NSString(contentsOfURL: whois_url!, encoding: NSUTF8StringEncoding, error: nil)
print(result!)
})
这将确保该方法不会 return 直到 URL 的内容被提取到结果中。