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)
为什么?
根据我目前所知,如果没有外部参数名称,则内部参数名称默认为外部参数名称。
答案 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,请使用参数名称。如果你使用的是一个函数变量,你就不会。
不确定这是否有帮助,如果不是让我知道。如果我错了,请告诉我:)