微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift:从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_sync替换dispatch_async:

dispatch_sync(dispatch_get_global_queue( disPATCH_QUEUE_PRIORITY_DEFAULT,{
    let whois_url = NSURL(string: SEARCH_URL+self.combined+"/whois")
    result = Nsstring(contentsOfURL: whois_url!,error: nil)
    print(result!)
})

这将确保在将URL的内容提取到结果中之前不返回该方法.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐