【问题标题】:What does this syntax mean in Swift?这个语法在 Swift 中是什么意思?
【发布时间】:2016-05-05 22:52:56
【问题描述】:

我是 Swift 新手,对这种语法感到困惑。我知道当你将 () 添加到你初始化它的东西的末尾时。我仍然很困惑这意味着什么!我在下面添加代码。

请帮助澄清这末尾的括号是什么意思!谢谢!

在这种情况下,在等号之后包含所有这些代码意味着什么? (我知道如何创建一个变量并添加一个 String、Int 或类似的东西)。

我只是对这段代码有点困惑。

感谢对初学者的理解!

 var viewController: ViewController = {

return self.instantiateViewControllerWithIdentifier("Play") as ViewController

}()

编辑 1 -

var statusBarStyle: UIStatusBarStyle = .Default {

        didSet{

            setNeedsStatusBarAppearanceUpdate()    
     }

}

【问题讨论】:

  • { ... } 定义了一个闭包(一个类似函数的对象),() 运行它。 viewController 使用 return 语句的结果进行初始化。

标签: swift function


【解决方案1】:

{} 声明了一个闭包,它是一个匿名函数。 {} 之间的所有内容都是函数体。由于在提供的代码中定义的闭包没有参数,因此() 可以将其作为常规函数执行。 { .. }() 只是定义并立即执行匿名函数。

在函数体中有一个对instantiateViewControllerWithIdentifier("Play") 的调用,它返回AnyObject。由于viewController 变量 (var) 预期是ViewController 的类型,我们将AnyObject 结果转换为instantiateViewControllerWithIdentifier as ViewController

对于statusBarStyle,UIStatusBarStyle 是一个枚举。 .Default 是枚举的案例之一。它也可以写成var statusBarStyle = UIStatusBarStyle.Default{ ... } 中的代码是一种声明 getter 和 setter 行为的方法。在这种特殊情况下,只定义了一个行为didSet,这意味着一旦UIStatusBarStyle 的值更新(这是可能的,因为它是var),调用函数setNeedsStatusBarAppearanceUpdate。您可能会在 Swift Book 中读到其他 getter 和 setter 关键字——https://itunes.apple.com/us/book/swift-programming-language/id881256329,例如 getsetwillSet

【讨论】:

  • 感谢您的精彩回答!我终于明白这意味着什么了。我在上面的代码中添加了一些东西。你也能解释一下吗?!
  • 另外,从你的回答来看,最后的 () 是什么让闭包被执行?
  • @SteveSmith () 可以让任何函数以零参数作为输入来执行。闭包是一个没有名字的函数,也就是匿名函数。
  • @SteveSmith 我用关于didSet 的解释更新了我的答案。祝你学习顺利:)
【解决方案2】:

正如 Nikita 所说,它会立即调用您声明的匿名函数。这非常有用,因为它允许您在初始化varlet 时添加逻辑。

由于该函数不带参数,因此一开始很难看出它实际上是一个函数。一个带参数的例子让这个概念更加清晰。

let oneMore: Int = { (num: Int) in num + 1 }(5) //oneMore = 6

我们正在创建一个函数,它接受一个Int 参数num 并隐式返回一个Int(编译器知道这一点是因为oneMore 上的类型注释。通过使用(5) 跟随闭包,我们是调用值为5的匿名函数。

希望这个例子能更清楚地说明发生了什么。请注意,对于上下文中的匿名函数,我们永远不需要提供参数,因为它只会被调用一次,并且后面有参数,因此我们可以将参数包含在函数体中。

let oneMore: Int = { 5 + 1 }()

在第二个示例中,大括号允许您将属性观察器包含到变量中。属性观察器的一个例子是didSet,每次你为变量赋值时都会调用它。更多信息可以在苹果文档中找到here.

【讨论】:

  • @这也是一个很好的答案!感谢您澄清一切。
猜你喜欢
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 2012-07-25
  • 2011-11-13
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多