【发布时间】:2018-07-09 06:55:10
【问题描述】:
我读过其他关于全局变量的问题,但我的情况很特殊。
首先我在类的开头声明实例变量:
class Answers: UIViewController {
var mystring:String!
var mystring2:String!
然后我在 Swift 3 中通过 Alamofire 获取 json 数据:
let jsonData = result as! NSDictionary
if !(jsonData.value(forKey: "error") as! Bool) {
let user = jsonData.value(forKey: "awdata") as! NSDictionary
let question = user.value(forKey: "question") as! String
print(question) // returns string "ABC"
mystring = question
mystring2 = "test"
}
当我在函数中使用这些变量时,变量 mystring1 返回 null,但变量 mystring2 返回 "test":
func someFunc() {
print(mystring) // returns nothing
print(mystring2) // returns test
}
那么为什么第一个变量没有保值,而第二个变量却记住了呢?
【问题讨论】:
-
代码不完整。它没有显示 Alamofire 相关代码以及如何(实际上是何时)使用函数
someFunc()。我猜你的情况并不特别,它看起来像著名的 async-trap。而且 - 一如既往 - 不要在 Swift 中使用NSDictionary,在这种情况下根本不要使用valueForKey。 -
使用原生
[String:Any]代替NSDictionary。而不是value(forKey这是一种 KVC 方法使用object(forKey或 - 推荐 - 密钥订阅 (jsonData["awdata"])。