【问题标题】:what do "_" and "in" mean in Swift programming language?Swift 编程语言中的“_”和“in”是什么意思?
【发布时间】:2014-06-17 18:18:52
【问题描述】:

我在github 上找到了一些用 Swift 编写的代码,

对这条线有点困惑

var done: (NSError?, NSData, NSString?) -> () = { (_, _, _) -> () in }

你能解释一下这行的真正含义吗?非常感谢!

【问题讨论】:

  • in 的行指定了闭包的签名。它允许您命名输入参数并指定输出返回类型

标签: swift


【解决方案1】:

_ 表示不要命名那个东西。它可以在许多地方使用。在您的情况下,它是说忽略传递给闭包的变量。您提供的代码忽略了所有参数,但您也可以忽略一些参数。

in 是执行闭包的开始。在您的示例代码中,闭包的实现是空的。

总的来说,该行定义了一个名为“done”的闭包,它接受一个可选的 NSError (NSError?)、NSData (NSData) 和可选的 NSString (NSString?) 并且不返回任何内容 (-> ())。闭包的实际实现什么都不做。

【讨论】:

  • 稍微扩展@drewag 的回答:“实际的实现绝对没有做任何事情”......因为该闭包是作为done 属性的默认值提供的,并且此@987654328 的用户@class 应该提供一个实际做某事的闭包。在该闭包中,您将为参数提供本地名称,而不是使用 _(如该要点中当前的第 55 行所示)。
  • @rickster 感谢您的精彩回答!我在要点中有关于此代码的另一个问题。什么时候会调用函数“connection”?我发现有三个函数共享同名“连接”,但我找不到这些函数的调用位置。谢谢!
  • @Ev3rlasting 这些是来自 NSURLConnection 的委托回调。您会注意到,在第 21 行创建 NSURLConnection 时,代码将 self 作为委托传递。
  • @drewag 感谢您的超快回复!是不是说调用line21的时候这三个“连接”函数都会被调用?
  • 看起来,无论谁投了这个问题,也投了答案。 10-10 它是。
【解决方案2】:

_ 是占位符参数名称。它表示需要一个参数,但不会使用。 in 表示闭包类型签名的结束。这一整行定义了一个函数,它接受三个参数并且什么都不做。

【讨论】:

    【解决方案3】:

    “_”用来使某些东西匿名。

    for (key, _) in dictionary{}
    

    在这里,我们以匿名的方式创造价值。

    In 用于启动闭包或循环,以及我们指定应用循环的集合。

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 2016-12-13
      • 2018-08-05
      相关资源
      最近更新 更多