我希望能够在块之外使用currentVote Int,其中currentVote是在类顶部定义的变量。
databaseRef.child("Jokes").child(currentKey).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if let currentNumber = snapshot.value! as? [String: AnyObject] {
let currentValue = (currentNumber["votes"] as? Int)!
self.currentVote = currentValue
}
})
//*Location* where i want to use currentVote with it's new value
位置是我想要使用currentVote的值的地方。当我在这里打印值时,我返回零,然后我将返回预期值。当我在块内打印值时,我得到了预期的值。我理解为什么会这样,因为块是在主线程之外执行的,因此当我在块外打印时,打印正在块之前执行,因此它的值为nil。我知道要将它放到主线程上你必须使用
dispatch_async(dispatch_get_main_queue(), {
code
})
但是,我通过此调度调用以多种不同的方式嵌套我的代码,但是还没有能够获得currentVote的新值。我已经搜索了堆栈溢出,用户建议在块之外创建一个函数,然后在里面调用它。但是,它们的功能涉及
func printValue(value: Int) {
print(value)
}
正如你所看到的那样对我来说没用,因为我想使用块外的值,而不是打印它!
***根据Cod3rite建议改变代码****
func get(completion: (value: Int) -> Void) {
databaseRef.child("Jokes").child(currentKey).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if let currentNumber = snapshot.value! as? [String: AnyObject] {
let currentValue = (currentNumber["votes"] as? Int)!
self.currentVote = currentValue
completion(value: self.currentVote!)
}
})
}
//where I want to use currentVote
我按照建议将其完成,但我仍然不知道如何获取变量!
答案 0 :(得分:1)
你几乎做对了。但是这里需要做一些修改:
=LARGE(A1:A9,INT((COUNT(A1:A9)/2)+0.5))
现在,当您想要调用此func get(completion: (value: Int) -> Void) {
databaseRef.child("Jokes").child(currentKey).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if let currentNumber = snapshot.value! as? [String: AnyObject] {
let currentValue = (currentNumber["votes"] as? Int)!
completion(value: currentValue)
}
})
}
时,请执行以下操作:
get