为什么在 case 1
中,我的函数返回 ["reached end": "reached end"]
而不是响应字典的值?如何让它返回 responseDictionary
的值?
背景:HelperClass.doMath
接受一个数字并有一个返回字典的完成 block
func handleTask(task: [String: AnyObject]) -> AnyObject {
switch task {
case 1:
if let bigNumber = task[bigNumberKey] as? NSNumber {
HelperClass.doMath(bigNumber, replyBlock: {(responseDictionary: [NSObject: AnyObject]!) -> Void in
return [responseDictionary]
})
}
case 2:
return 2
case 3:
return 3
default:
break
}
return ["reached end": "reached end"]
}
最佳答案
这应该有效:
func handleTask(task: [String: AnyObject]) -> AnyObject {
switch task {
case 1:
if let bigNumber = task[bigNumberKey] as? NSNumber {
return HelperClass.doMath(bigNumber, replyBlock: {(responseDictionary: [NSObject: AnyObject]!) -> Void in
return [responseDictionary]
})
}
case 2:
return 2
case 3:
return 3
default:
break
}
return ["reached end": "reached end"]
}
您的闭包 replyBlock
被传递给 HelperClass
的 doMath
方法,并在那里用于某些目的。它在您的 handleTask
函数的范围内执行。因此,return [responseDictionary]
会将您带回到您的案例 1
的范围内,并且不会导致 handleTask
返回任何内容。
你想做的(我假设)是返回这个函数的结果。这可以通过简单地在方法调用前添加一个 return 来实现,这将依次返回 doMath
产生的任何结果。
关于swift - 从闭包中的函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840621/