我有这段代码:
func doSomething(_ closure: ([Double]?, Double?) -> Double?) {
closure([1,2,3,4], 8)
}
print(doSomething({ return $0?.max() ?? $1}))
我需要帮助理解它为什么不返回任何内容,何时返回数组中的最大值或第二个参数。
答案 0 :(得分:1)
doSomething
是一个 void 函数。采用类型(([Double]?, Double?) -> Double?)
的参数并不意味着函数本身应该返回Double?
虽然这个函数对我来说似乎很奇怪,但我认为你想要实现的是:
func doSomething(_ closure: ([Double]?, Double?) -> Double?) -> Double? {
return closure([1,2,3,4], 8)
}
完成此编辑后,输出应为:
print(doSomething { return $0?.max() ?? $1 }) // Optional(4.0)
对于这种情况,我建议安全打开它,你可能想要“可选绑定”它:
if let value = doSomething({ return $0?.max() ?? $1}) {
print(value) // 4.0
}