带参数和不带参数的闭包语法

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) 是 运行,导致打印最后一行。