带或不带参数的闭合语法

问题描述 投票:0回答:3

iOS 13、Swift 5

我正试图了解Swift中的闭合语法,而且差不多了。我明白了前三个bon,也理解了它们;但最后一个不明白。我怎么在这里调用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)
}
}
ios swift swiftui closures
3个回答
2
投票

方法4中的闭包被定义为返回一个字符串,所以当你调用它时,你要做的就是这个。

self.the4Method("World") { arg2do -> String in
    return "1 " + arg2do
}

2
投票

你得到了闭包语法 ({ (parameters) -> ReturnValueType in statements })的权利,但由于第四个方法需要一个返回 String,你需要返回一个字符串。

例如,这个。

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") 被运行,导致第二行被打印。之后,关闭返回 "return value" 而我们现在又回到了 the4Method. 返回值被分配给 anprint("An ",an) 运行,导致最后一行被打印。

© www.soinside.com 2019 - 2024. All rights reserved.