Swift 中的局部和全局变量
Local and Global variables in Swift
我有一段简单的代码,我想我在其中使用了局部变量和全局变量。但是,我很难理解这里出了什么问题。我一开始设置"var hhhh:Int = 0"。然后,在 if 语句中,我将 "hhhh = appleCount["count"] 设置为!Int"。因为 appleCount["count"] 不为零并且有一些值,所以 hhhh 得到它的值(我试过 uisng 打印语句并且 hhhh 在 if 语句中不为零),但是,稍后当我用 print( “(hhhh)”) 在 if 之外,我再次得到它的零值。它与局部变量和全局变量有关吗?顺便在代码中尝试与Parse进行通信。
非常感谢您的帮助
import UIKit
import Parse
class NewsPageViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad(
var hhhh:Int = 0
var tttt:Int = 0
var cccc:Int = 1
if cccc == 1 {
var query = PFQuery(className: "Count")
query.getObjectInBackgroundWithId("RhC25gVjZm", block: { (object: PFObject?, error: NSError?) -> Void in
if error != nil {
print(error)
} else if let appleCount = object {
appleCount["count"] = appleCount["count"] as! Int + 1
hhhh = appleCount["count"] as! Int
appleCount.saveInBackground()
}
})
}
print(hhhh)
}
}
它与局部变量和全局变量无关。它与后台线程有关。参数标签 "block" 后方括号 {} 中的代码稍后将 运行 在后台线程中。
你的 print(hhhh) 是 运行ning 在块有机会改变 hhhh 之前。将 print 语句移回块内,以便您可以看到正在设置的变量。
osteven 的回复帮助我理解了这个问题。非常感谢,伙计。除了 osteven 的回应之外,我只是想补充一点,我的问题的主要部分即将到来,因为我试图对我试图在 Parse 中保存的对象进行一些数学运算。因此,我还想到我可以创建一个数组,将我的对象保存在该数组中,然后访问键并更新值。这是我现在正在使用的示例代码。它对保存在 Parse 中的两个不同对象进行一些数学运算,并更新屏幕上的标签文本。为了访问 Parse 中的两个对象并更新它们,我使用了一个数组。
希望这里的答案对将来的人有所帮助,因为 Whosebug 的优秀人员现在正在帮助我。
和平!
var hhhh : [Int] = []
@IBOutlet weak var jPercent: UILabel!
@IBOutlet weak var yPercent: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
var query = PFQuery(className: "Count")
if cccc == 1 {
query.getObjectInBackgroundWithId("DcU9tdRdnl", block: { (object: PFObject?, error: NSError?) -> Void in
if error != nil {
print(error)
} else if let jCount = object {
jCount["count"] = jCount["count"] as! Int + 1
jCount.saveInBackground()
}
})
} else if cccc == 2 {
query.getObjectInBackgroundWithId("5Bq4HJbFa3", block: { (object: PFObject?, error: NSError?) -> Void in
if error != nil {
print(error)
} else if let yCount = object {
yCount["count"] = yCount["count"] as! Int + 1
yCount.saveInBackground()
}
})
}
//shouldn't use same query for findObjectsInBackgroundWithBlock and getObjectInBackgroundWithId otherwise you'll get a runtime error
var query2 = PFQuery(className: "Count")
query2.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let users = objects {
for object in users {
if let user = object["count"] as? Int {
self.hhhh.append(user)
}
}
}
var gggg = 100*Float(self.hhhh[0])/(Float(self.hhhh[0]+self.hhhh[1]))
self.yPercent.text = String(format: "%.1f", gggg) + "%"
self.jPercent.text = String(format: "%.1f", 100 - gggg) + "%"
print(self.hhhh[0])
}
}
我有一段简单的代码,我想我在其中使用了局部变量和全局变量。但是,我很难理解这里出了什么问题。我一开始设置"var hhhh:Int = 0"。然后,在 if 语句中,我将 "hhhh = appleCount["count"] 设置为!Int"。因为 appleCount["count"] 不为零并且有一些值,所以 hhhh 得到它的值(我试过 uisng 打印语句并且 hhhh 在 if 语句中不为零),但是,稍后当我用 print( “(hhhh)”) 在 if 之外,我再次得到它的零值。它与局部变量和全局变量有关吗?顺便在代码中尝试与Parse进行通信。 非常感谢您的帮助
import UIKit
import Parse
class NewsPageViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad(
var hhhh:Int = 0
var tttt:Int = 0
var cccc:Int = 1
if cccc == 1 {
var query = PFQuery(className: "Count")
query.getObjectInBackgroundWithId("RhC25gVjZm", block: { (object: PFObject?, error: NSError?) -> Void in
if error != nil {
print(error)
} else if let appleCount = object {
appleCount["count"] = appleCount["count"] as! Int + 1
hhhh = appleCount["count"] as! Int
appleCount.saveInBackground()
}
})
}
print(hhhh)
}
}
它与局部变量和全局变量无关。它与后台线程有关。参数标签 "block" 后方括号 {} 中的代码稍后将 运行 在后台线程中。
你的 print(hhhh) 是 运行ning 在块有机会改变 hhhh 之前。将 print 语句移回块内,以便您可以看到正在设置的变量。
osteven 的回复帮助我理解了这个问题。非常感谢,伙计。除了 osteven 的回应之外,我只是想补充一点,我的问题的主要部分即将到来,因为我试图对我试图在 Parse 中保存的对象进行一些数学运算。因此,我还想到我可以创建一个数组,将我的对象保存在该数组中,然后访问键并更新值。这是我现在正在使用的示例代码。它对保存在 Parse 中的两个不同对象进行一些数学运算,并更新屏幕上的标签文本。为了访问 Parse 中的两个对象并更新它们,我使用了一个数组。
希望这里的答案对将来的人有所帮助,因为 Whosebug 的优秀人员现在正在帮助我。 和平!
var hhhh : [Int] = []
@IBOutlet weak var jPercent: UILabel!
@IBOutlet weak var yPercent: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
var query = PFQuery(className: "Count")
if cccc == 1 {
query.getObjectInBackgroundWithId("DcU9tdRdnl", block: { (object: PFObject?, error: NSError?) -> Void in
if error != nil {
print(error)
} else if let jCount = object {
jCount["count"] = jCount["count"] as! Int + 1
jCount.saveInBackground()
}
})
} else if cccc == 2 {
query.getObjectInBackgroundWithId("5Bq4HJbFa3", block: { (object: PFObject?, error: NSError?) -> Void in
if error != nil {
print(error)
} else if let yCount = object {
yCount["count"] = yCount["count"] as! Int + 1
yCount.saveInBackground()
}
})
}
//shouldn't use same query for findObjectsInBackgroundWithBlock and getObjectInBackgroundWithId otherwise you'll get a runtime error
var query2 = PFQuery(className: "Count")
query2.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let users = objects {
for object in users {
if let user = object["count"] as? Int {
self.hhhh.append(user)
}
}
}
var gggg = 100*Float(self.hhhh[0])/(Float(self.hhhh[0]+self.hhhh[1]))
self.yPercent.text = String(format: "%.1f", gggg) + "%"
self.jPercent.text = String(format: "%.1f", 100 - gggg) + "%"
print(self.hhhh[0])
}
}