我是Swift的新手,并且对这种语法感到困惑。我知道当你添加()到初始化它的东西时。我仍然感到困惑,这意味着什么!我在下面添加代码。
请帮助澄清这意味着什么的括号!谢谢!
在这种情况下,在等号后面有所有代码是什么意思? (我知道如何创建一个变量并添加一个String,Int或类似的东西)。
我只是对这段代码感到困惑。
感谢您对初学者的理解!
var viewController: ViewController = {
return self.instantiateViewControllerWithIdentifier("Play") as ViewController
}()
编辑1 -
var statusBarStyle: UIStatusBarStyle = .Default {
didSet{
setNeedsStatusBarAppearanceUpdate()
}
}
答案 0 :(得分:4)
{}
声明一个闭包,这是一个匿名函数。 {
和}
之间的所有内容都是函数体。由于在提供的代码中定义的闭包没有参数,因此()
可以将其作为常规函数执行。 { .. }()
只是定义并立即执行匿名函数。
在函数体中,调用instantiateViewControllerWithIdentifier("Play")
,返回AnyObject
。由于viewController
变量(var
)预计属于ViewController
类型,我们会AnyObject
instantiateViewControllerWithIdentifier
as
的结果}} ViewController
至于statusBarStyle
,UIStatusBarStyle是一个枚举。 .Default
是enum的案例之一。它可以替换为var statusBarStyle = UIStatusBarStyle.Default
。 { ... }
中的代码是一种声明getter和setter行为的方法。在这种特殊情况下,只定义了一个行为didSet
,这意味着只要UIStatusBarStyle
的值更新(这是可能的,因为它是var
),就会调用函数{{1} }。还有其他的吸气剂和您可以在Swift Book中了解的setters关键字 - https://itunes.apple.com/us/book/swift-programming-language/id881256329,例如setNeedsStatusBarAppearanceUpdate
,get
,set
。
答案 1 :(得分:3)
正如Nikita所说,它立即调用你声明的匿名函数。这非常有用,因为它允许您在初始化var
或let
时添加逻辑。
由于函数不带参数,因此一开始就很难看到它实际上是一个函数。一个带参数的例子使这个概念更加清晰。
let oneMore: Int = { (num: Int) in num + 1 }(5) //oneMore = 6
我们正在创建一个函数,它接受一个Int
参数num
并隐式返回Int
(由于oneMore
上的类型注释,编译器知道这一点。使用(5)
的闭包我们调用匿名函数,其值为5
。
希望这个例子可以更清楚地说明发生了什么。注意在上下文中我们永远不需要提供参数的匿名函数,因为它只会被跟随它的参数调用一次,所以我们可以在函数体中包含参数。
let oneMore: Int = { 5 + 1 }()
在第二个示例中,大括号允许您将属性观察者包含在变量中。属性观察者的一个示例是didSet
,每次 >>为变量赋值后都会调用它。更多信息可以在apple docs here.