带参数和不带参数的闭包语法
Closure Syntax with and without parameters
iOS13,Swift5
我正在努力了解 Swift 中的闭包语法,差不多就到此为止了。我得了前三苯教,并且了解了它们;但最后没有。我如何在这里调用 self.theMethod4 ?显示的语法错误!
struct ContentView: View {
var body: some View {
Text("Hello, World!")
.onAppear {
self.theMethod {
print("1")
}
self.the2Method("Ya ") {
print("1")
}
self.the3Method("Hello") {arg2do in
print("1 ",arg2do)
}
self.the4Method("World") { (arg2do) -> String in
print("1 ",arg2do)
}
}
}
func theMethod(_ endOfMethod: @escaping () -> Void) {
print("2")
endOfMethod()
}
func the2Method(_ arg1:String, endOfMethod: @escaping () -> Void) {
print("3")
endOfMethod()
}
func the3Method(_ arg1:String, endOfMethod: @escaping (_ arg2:String) -> Void) {
print("4")
endOfMethod("Yo")
}
func the4Method(_ arg1:String, endOfMethod: @escaping (_ arg2: String) -> String) {
print("5")
let an = endOfMethod("Pe")
print("An ",an)
}
}
方法 4 中的闭包被定义为 return 一个字符串,所以当你调用它时,你必须这样做:
self.the4Method("World") { arg2do -> String in
return "1 " + arg2do
}
你的闭包语法 ({ (parameters) -> ReturnValueType in statements }
) 是正确的,但是由于第四种方法需要一个 return 是 String
的闭包,你需要 return 一个字符串.
例如,这个:
self.the4Method("World") { (arg2do) -> String in
print("1 ",arg2do)
return "return value"
}
打印:
5
1 Pe
An return value
输出解释:
首先 the4Method
的正文得到 运行,所以 5
得到打印。然后 the4Method
调用 endOfMethod
,这是传入的闭包,参数为 "Pe"
。所以 print("1 ", "Pe")
得到 运行,导致打印第二行。之后,关闭 returns "return value"
,我们现在回到 the4Method
。 return 值被分配给 an
,而 print("An ",an)
是 运行,导致打印最后一行。
iOS13,Swift5
我正在努力了解 Swift 中的闭包语法,差不多就到此为止了。我得了前三苯教,并且了解了它们;但最后没有。我如何在这里调用 self.theMethod4 ?显示的语法错误!
struct ContentView: View {
var body: some View {
Text("Hello, World!")
.onAppear {
self.theMethod {
print("1")
}
self.the2Method("Ya ") {
print("1")
}
self.the3Method("Hello") {arg2do in
print("1 ",arg2do)
}
self.the4Method("World") { (arg2do) -> String in
print("1 ",arg2do)
}
}
}
func theMethod(_ endOfMethod: @escaping () -> Void) {
print("2")
endOfMethod()
}
func the2Method(_ arg1:String, endOfMethod: @escaping () -> Void) {
print("3")
endOfMethod()
}
func the3Method(_ arg1:String, endOfMethod: @escaping (_ arg2:String) -> Void) {
print("4")
endOfMethod("Yo")
}
func the4Method(_ arg1:String, endOfMethod: @escaping (_ arg2: String) -> String) {
print("5")
let an = endOfMethod("Pe")
print("An ",an)
}
}
方法 4 中的闭包被定义为 return 一个字符串,所以当你调用它时,你必须这样做:
self.the4Method("World") { arg2do -> String in
return "1 " + arg2do
}
你的闭包语法 ({ (parameters) -> ReturnValueType in statements }
) 是正确的,但是由于第四种方法需要一个 return 是 String
的闭包,你需要 return 一个字符串.
例如,这个:
self.the4Method("World") { (arg2do) -> String in
print("1 ",arg2do)
return "return value"
}
打印:
5
1 Pe
An return value
输出解释:
首先 the4Method
的正文得到 运行,所以 5
得到打印。然后 the4Method
调用 endOfMethod
,这是传入的闭包,参数为 "Pe"
。所以 print("1 ", "Pe")
得到 运行,导致打印第二行。之后,关闭 returns "return value"
,我们现在回到 the4Method
。 return 值被分配给 an
,而 print("An ",an)
是 运行,导致打印最后一行。