Variables locales y globales en Swift
parse.com global-variables (2)
Tengo un código simple que supongo que estoy usando variables locales y globales en él. Pero me cuesta entender lo que está pasando aquí. Estoy configurando "var hhhh: Int = 0" al principio. Luego, dentro de la declaración if, configuro "hhhh = appleCount [" count "] como! Int". Como appleCount ["count"] no es cero y tiene algún valor, hhhh obtiene su ''valor (intenté usar una declaración de impresión y hhhh no es cero dentro de la instrucción if), pero más tarde cuando imprimo hhhh con print ("( hhhh) ") afuera si, nuevamente obtengo cero por su ''valor. ¿Tiene algo que ver con las variables locales y globales? Estoy tratando de comunicarme con Parse en el código por cierto. Muchas gracias por tu amable ayuda
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)
}
}
La respuesta de osteven me ayudó mucho a entender el problema. Muchas gracias hombre. Además de la respuesta de Oskeven, simplemente mengué para agregar que una gran parte de mi problema venía porque estaba tratando de hacer algunas operaciones matemáticas en los objetos que estaba tratando de guardar en Parse. Entonces, también pensé que podría crear una matriz, guardar mis objetos dentro de esa matriz, y luego acceder a la clave y actualizar los valores. Aquí hay un código de muestra de lo que estoy usando en este momento. Realiza una operación matemática en dos objetos diferentes guardados en Parse y actualiza el texto de la etiqueta en la pantalla. Para acceder a los dos objetos en Parse y actualizarlos, estoy usando una matriz.
Espero que las respuestas aquí ayuden a alguien en el futuro, ya que las personas increíbles de me están ayudando ahora. ¡Paz!
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])
}
}
No tiene que ver con variables locales y globales. Tiene que ver con los hilos de fondo. El código entre corchetes {} después de la etiqueta del parámetro "bloque" se ejecutará en un hilo de fondo en un momento posterior.
Su impresión (hhhh) se está ejecutando antes de que el bloque haya tenido la oportunidad de cambiar hhhh. Mueva la instrucción de impresión de nuevo dentro del bloque para que pueda ver la variable que se está configurando.