gpt4 book ai didi

Swift 变量值和函数

转载 作者:行者123 更新时间:2023-11-28 11:07:41 25 4
gpt4 key购买 nike

我有一段代码,其中初始化了一个可选值,然后在函数中为其分配了一个值,但在展开时是 nill 吗?

var datastring: String?
Alamofire.request(.POST, "https://example.url/request", parameters: parameters) .response { request, response, data, error in
datastring = NSString(data: data!, encoding:NSUTF8StringEncoding) as! String // there is data in here
// textView.text = datastring! datastring is not nill when here
}
textView.text = datastring! // datastring is nill when here

这不是 Alamofire 特有的。我在使用 native Swift 方法时遇到过这个问题。我哪里做错了,为什么 Swift 会这样工作?

附言。我还在学习:)

编辑:感谢所有帮助过我的人。为了澄清这个问题,这是一个将变量的值从异步线程传输到主线程的问题。我只是不知道该怎么说。

最佳答案

您正在更新闭包中的 datastring 变量。这是传递给 Alamofire 稍后执行的代码(可能是几微秒后)。因此,将 datastring 分配给 textView 的行首先发生,在闭包执行之前。

试试这个:

var datastring: String?

Alamofire.request(.POST, "https://example.url/request", parameters: parameters).response { request, response, data, error in
datastring = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String

dispatch_async(dispatch_get_main_queue()) {
textView.text = datastring
}
}

使用 dispatch_async 调用确保 UI 更新发生在主线程上。

网络请求有可能在数秒(或更长时间)内不会发生,因此您可能希望使用临时字符串更新 UI,以便用户在等待时看到一些东西。

关于Swift 变量值和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com