加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift:从dispatch_async内部返回结果

发布时间:2020-12-14 04:27:06 所属栏目:百科 来源:网络整理
导读:所以我在这里有一段代码不起作用.这是因为它在尝试解包可选值时发现了nil.这是因为它在异步方法中被初始化.我的问题是,在取出结果之前,我该如何推迟返回函数? struct Domain { var name: String? var tld: String? var combined: String { get { return sel
所以我在这里有一段代码不起作用.这是因为它在尝试解包可选值时发现了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的内容提取到结果中之前不返回该方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读