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])
    }
}