Ios 何时从Swift中的另一个函数返回函数
您希望从Swift中的函数返回函数的最常见情况是什么 在下面的代码中,我返回一个函数,但我没有真正看到它的用途,因为我返回的函数在返回它的函数内部。我感到困惑的原因是,我们可以用一个函数完成同样的事情Ios 何时从Swift中的另一个函数返回函数,ios,swift,Ios,Swift,您希望从Swift中的函数返回函数的最常见情况是什么 在下面的代码中,我返回一个函数,但我没有真正看到它的用途,因为我返回的函数在返回它的函数内部。我感到困惑的原因是,我们可以用一个函数完成同样的事情 func person () -> ((String, Int) -> String) { func info(name: String, age: Int) -> (String) { return "\(name) is \(age) old" } r
func person () -> ((String, Int) -> String) {
func info(name: String, age: Int) -> (String) {
return "\(name) is \(age) old"
}
return info
}
let nathan = person()
nathan("Nathan", 3)
print(nathan("Nathan", 3))
有人能指出您希望返回函数的常见情况,并用更好的示例加以说明吗
我想了解这一点,因为这是编程的基础,而不仅仅是Swift(我认为)。一个典型的例子是在计算器程序中,例如:
func operatorForString(str: String) -> ((Float, Float) -> Float)? {
if str == "+" {
return (+) // brackets required to clarify that we mean the function
} else if str == "-" {
return (-)
} else if str == "*" {
return (*)
} else if str == "/" {
return (/)
} else if str == "**" {
return pow // No brackets required here
} else {
return nil
}
}
if let op = operatorForString("-") {
let result = op(1, 2) // -1
}
这是相当做作的,但它简单地说明了原理
作为“读者练习”,尝试将其作为
字典
查找,而不是重复if
s:)这是一个函数式编程概念,不一定是编程的基础。您应该阅读函数式编程和currying
概念。例如,请参阅此链接:优点之一是每个函数只接受一个参数。@LaurentRivard注意,currying可能会从swift中删除:请查看函数闭包作为实际返回/使用的用法示例object@luk2302说得好!尽管该问题标有swift
和ios
,但它似乎更像是一个函数式编程问题@fs_tigre:阅读luk2302发布的文章,它展示了一个很好的例子,说明了您何时想要返回函数,更重要的是,苹果工程师如何看待iOS应用程序中的一些概念。@LaurentRivard我同意,Curry是haskell的核心概念,例如,我只是想指出,它大部分是未使用的,将来可能会在swift中删除。