这个语法在Swift中意味着什么?

时间:2016-05-05 22:52:57

标签: swift function

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

请帮助澄清这意味着什么的括号!谢谢!

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

我只是对这段代码感到困惑。

感谢您对初学者的理解!

 var viewController: ViewController = {

return self.instantiateViewControllerWithIdentifier("Play") as ViewController

}()

编辑1 -

var statusBarStyle: UIStatusBarStyle = .Default {

        didSet{

            setNeedsStatusBarAppearanceUpdate()    
     }

}

2 个答案:

答案 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,例如setNeedsStatusBarAppearanceUpdategetset

答案 1 :(得分:3)

正如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,每次 >为变量赋值后都会调用它。更多信息可以在apple docs here.

中找到