swift - 从闭包中的函数返回

标签 swift closures return-value swift2

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

关于swift - 从闭包中的函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840621/

相关文章:

ios - 我们是否应该为所有不同的可下载文件创建不同的唯一 session 标识符 - swift

php - PHP 5.3 和 5.4 之间的闭包有什么区别?

ios - 将闭包中的值分配给变量 Swift

python - 在 for 循环中返回所有值

ios - 以编程方式在 Stackview 上设置间距

ios - 在 UITableViewCell 中调用 UIAlertController

javascript - 如何遍历任何字母数组并为 DOM 中的每个字母制作动画

c++ - 我可以将特定警告视为错误吗?

function - Bourne shell 函数返回变量始终为空

ios - CardPlayer 卡片未加载