函数作为返回类型Swift 4

时间:2017-06-25 22:27:32

标签: swift

Swift的新手。我试图将函数理解为Swift4中的返回类型。如果我使用以下示例:

func functionAsAReturnType () -> ((String, String) -> String) {
    func finalString(parameter1: String, parameter2: String) -> (String) {
        return parameter1 + parameter2
    }
    return finalString
}
let finalString = functionAsAReturnType()
finalString("Hello", "World")

在调用finalString函数时,我不需要提供外部参数名称。

但是如果我尝试将finalString作为一个单独的函数创建,那么在调用函数时我必须做这样的事情:

finalString(parameter1: 2, parameter2: 2)

为什么?

根据我目前所知,如果没有外部参数名称,则内部参数名称默认为外部参数名称。

1 个答案:

答案 0 :(得分:2)

你是对的 - 当调用分配给变量的函数时(即它已从另一个函数返回),你没有参数名。虽然您仍然可以向调用者提示使用d的参数是什么意思,即直接返回函数时

path

会被称为

_

func userFactory(factoryName: String) -> (_ firstname: String, _ lastname: String) -> User { return { firstname, lastname in return User(factoryName, firstname, lastname) } } 方法中使用参数名称的原因是因为这是在范围内声明的函数,而不是分配给变量,例如。

let factory = userFactory(factoryName: "Factory")

let user1 = factory("John", "Doe")
let user2 = factory("Jane", "Doe")

但是,如果您声明您的函数,则此规则不适用:

functionAsAReturnType

在这里,你没有调用func func userFactory(factoryName: String) -> (_ firstname: String, _ lastname: String) -> User { func inner(firstname: String, lastname: String) { return User(factoryName, firstname, lastname) } // Look, parameter names :| inner(firstname: "Bob", lastname: "Smith") return inner } 的声明(就像最后一个例子),你用一些参数调用变量func userFactory(factoryName: String) -> (_ firstname: String, _ lastname: String) -> User { let inner = { (firstname: String, lastname: String) in return User(factoryName, firstname, lastname) } // No parameters names here inner("Bob", "Smith") return inner }

你可以用已经存在的函数来看到它,即

inner

tl; dr - 如果您正在调用func,请使用参数名称。如果你使用的是一个函数变量,你就不会。

不确定这是否有帮助,如果不是让我知道。如果我错了,请告诉我:)