从闭包中的函数返回

时间:2015-08-05 18:55:12

标签: swift closures return-value swift2

为什么在case 1中,我的函数返回["reached end": "reached end"]而不是响应字典的值?如何使用responseDictionary的值返回

背景:HelperClass.doMath取一个数字,并有一个返回字典的完成块

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

1 个答案:

答案 0 :(得分:0)

这应该有效:

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正在传递给doMath的{​​{1}}方法,并在那里用于某些目的。它在HelperClass函数的范围内执行。因此handleTask会将您带回return [responseDictionary]的范围,并且不会导致case 1返回任何内容。
你想做的事情(我假设)是返回这个函数的结果。这可以通过简单地在方法调用前添加一个返回来实现,这将返回任何结果handleTask的产生。