Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 何时从Swift中的另一个函数返回函数_Ios_Swift - Fatal编程技术网

Ios 何时从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

您希望从Swift中的函数返回函数的最常见情况是什么

在下面的代码中,我返回一个函数,但我没有真正看到它的用途,因为我返回的函数在返回它的函数内部。我感到困惑的原因是,我们可以用一个函数完成同样的事情

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中删除。