2016-05-05 8 views
3

私はSwiftを初めて使い、この種の構文と混同しています。あなたが初期化するものの最後に()を追加するとわかります。私はまだこれが何を意味するのか混乱している!私は以下のコードを追加しています。Swiftではこの構文の意味は何ですか?

この手段の最後にどのようなかっこがあるのか​​を確認してください。ありがとうございました!

この場合、等号の後にすべてのコードを持つことは、どういう意味ですか? (私はどのように変数を作成し、それにStringやIntなどを追加する方法を知っています)。

私はちょうどこのコードと少し混乱しています。

初心者にご理解いただきありがとうございます。

var viewController: ViewController = { 

return self.instantiateViewControllerWithIdentifier("Play") as ViewController 

}() 

EDIT 1 -

var statusBarStyle: UIStatusBarStyle = .Default { 

     didSet{ 

      setNeedsStatusBarAppearanceUpdate()  
    } 

} 
+0

'{...}'はクロージャ(関数のようなオブジェクト)を定義し、 '()'がそれを実行します。 'viewController'は' return'文の結果で初期化されます。 – zneak

答えて

4

{}は匿名関数である閉鎖を宣言します。 {}の間のすべてが関数本体です。提供されたコードで定義されたクロージャは引数を持たないため、()によって通常の関数として実行できます。 { .. }()は、匿名関数を定義してすぐに実行しています。

関数の本体には、を返すinstantiateViewControllerWithIdentifier("Play")という呼び出しがあります。 ViewControllerのタイプBAに期待viewController変数var)として、私たちはstatusBarStyleについてはinstantiateViewControllerWithIdentifierasViewController

AnyObject結果をキャスト、UIStatusBarStyleが列挙型です。 .Defaultはenumのケースの1つです。代わりにvar statusBarStyle = UIStatusBarStyle.Defaultと書くことができます。 { ... }にあるコードは、ゲッターとセッターの動作を宣言する方法です。この特定のケースでは、didSetの動作が1つしか定義されていないため、UIStatusBarStyleの値が更新されると(可能な場合は、var)、コール機能setNeedsStatusBarAppearanceUpdateを意味します。スウィフトブックで読むことができる他のゲッター&セッターキーワード - get,setwillSetのようなhttps://itunes.apple.com/us/book/swift-programming-language/id881256329があります。

+0

偉大な答えをありがとう!私はついにそれが何を意味するかを見ます。私は上記のコードに何かを加えました。あなたもそれを説明してくださいできますか? – SteveSmith

+0

また、あなたの答えから、最後の()はクロージャを実行するためのものですか? – SteveSmith

+0

@SteveSmith '()'は、ゼロ引数を入力として持つ関数を実行させるものです。 Closureは、名前のない匿名関数を持たない関数です。 –

3

Nikitaは、即座に、あなたが宣言した無名関数を呼び出すと述べました。これは、varまたはletを初期化するときにロジックを追加できるので、本当に便利です。

この関数は引数をとらないので、最初は実際に関数であることがわかりにくくなります。議論を伴う例は、この概念をより明確にする。

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

我々は(コンパイラがあるためoneMoreの型注釈のこれを知っている1つのInt引数numをとり、暗黙的にIntを返す関数を作成している。と(5)で閉鎖に従うことにより、我々は匿名関数を呼び出しています5

この例では、何が起こっているのかをより明確にしたいと考えています。文脈中の匿名関数は、引数を提供する必要はないことに注意してください。それは、引数の後に続く引数で一度しか呼び出されないため、引数を関数本体に含めることができるからです。 2番目の例では

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

中括弧を使用すると、変数にプロパティのオブザーバーを含めるように許可しています。プロパティオブザーバの例は、です。これは、の後に毎回と呼ばれ、変数に値を割り当てます。もっと詳しい情報は、appleのdocsにあります。here.

+0

@これも素晴らしい答えでした!すべてを明確にしてくれてありがとう。 – SteveSmith

関連する問題