

書籍のサンプルコードに関して、２点ご教示ください。  
参考文献：iPhone/iPadプログラミングバイブル：著 布留川英一

[code]

    //パズルゲームの作成
    class ViewController: UIViewController {
       let BTN_START = 0
       let sCREEn = UIScreen.mainScreen().bounds.size
       // →Q1「この１文は、どういう文法を使って、何をアウトプットしようとしているのか？」
    
       var _GAMEVIEW: UIView?
       var _TITLELABEL: UILabel?
       var _piece = [UIImageView]()
       var _data = [Int]()
       // →Q2「上の２文の『[xxxx]()』はどういう意味（文法）でしょうか？」
       var _SHUFFLE: Int = 0
    
    // 続く、、、、、、、、
    
[/code]


CC BY-SA 3.0
2015-09-05T05:46:07.080
16281
2015-09-05T12:41:28.737
2015-09-05T12:41:28.737
2238
12207
question
swift
書籍のサンプルコードについて：「bounds」の意味、「[xxxx]()」の意味

[code]

    let sCREEn = UIScreen.mainScreen().bounds.size
    // →Q1「この１文は、どういう文法を使って、何をアウトプットしようとしているのか？」
    
[/code]

この質問の主眼は、「boundsの意味」にはありません。boundsの意味は、UIScreenのプロパティで、画面の四囲の座標ですが、詳しくはUIScreenのクラスリファレンスで調べる（Xcodeのヘルプウインドウからアクセス可）か、「UIScreen
bounds」などをキーワードにして、ネット検索してください。  
この質問の主眼は、3つあるドットにあります。習熟したプログラマでも気にする人は少ないと思いますが、3つとも意味が異なります。まず、この1行を3行に分割してみていきましょう。

[code]

    let screen: UIScreen = UIScreen.mainScreen()
    let screenRectangle: CGRect = screen.bounds
    let screenSize: CGSize = screenRectangle.size
    
[/code]

1行目のドット（.）は、Receiver（クラスあるいはインスタンス）とMethod（メソッド）を結びつけます。Receiverに対して、メソッドを実行しなさいという意味を持ちます。ここでは、UIScreenクラスに対し、メインのスクリーンインスタンスを返しなさいという命令をしています。PCやMacでは、複数のディスプレイを接続して、使用することができ、メインのスクリーンを取得するというのは、イメージしやすいですが、iPhone/iPadではむずかしいかもしれません。が、iPhone/iPadを、テレビゲームのコントローラにするという用途は、ありそうです。そういう使い方なら、マルチスクリーン環境ということになります。

2行目のドットは、screenインスタンスのProperty（プロパティ）boundsにアクセスする意味を持ちます。プロパティはメソッドと同様、値を返します。boundsは、CGRect型の値を返します。  
3行目のドットは、Structure（構造体）CGRectのプロパティsizeにアクセスします。プロパティへのアクセスという意味は共通なので、2行目と大きく異なることはありません。プロパティsizeは、CGSize型を返します。

以上から、Q1に対する回答は、「ドット文法（Dot Syntax）を使って、画面のサイズを、CGSize型で出力する」となります。

[code]

    var _piece = [UIImageView]()
    var _data = [Int]()
    // →Q2「上の２文の『[xxxx]()』はどういう意味（文法）でしょうか？」
    
[/code]

Swiftでは、大括弧（[]）を、Array（配列）とDictionary（辞書）に対して使用します。  
C言語では、配列の宣言を

[code]

    int array[];
    
[/code]

とします。同様の宣言をSwiftで行うと、

[code]

    var array: [Int]
    
[/code]

となります。配列の要素の型を大括弧で囲む形で、配列の型とします。  
Swiftでは、オブジェクト（クラス、インスタンス、構造体、列挙子、配列、辞書、文字列、整数、実数などを包括した表現）のイニシアライザ（Javaでは、コンストラクタと呼ぶのだと思います。）を、

[code]

    型名()
    
[/code]

という書式で行います。

[code]

    // 整数Intのイニシアライズ
    var value = Int()
    // 文字列Stringのイニシアライズ
    var string = String()
    
[/code]

なので、Q2の答えは、

[code]

    var _piece = [UIImageView]()
    // UIImageView型を要素とする配列のイニシアライザ
    var _data = [Int]()
    // Int型を要素とする配列のイニシアライザ
    
[/code]

となります。  
ちなみに、かっこの中を空のままにすると、要素数0（空）の配列を生成します。


CC BY-SA 3.0
2015-09-05T10:16:38.797
16289
2015-09-05T10:16:38.797
7362
16281
answer


**A1** : `let sCREEn = UIScreen.mainScreen().bounds.size`の意味

**端末の画面のサイズを変数`sCREEn`に代入している**

  1. `UIScreen.mainScreen()`で端末の画面* をオブジェクトとして取得
  2. `UIScreen`オブジェクトのプロパティ`bounds`は端末の画面のローカル領域を示す
  3. `bounds`に含まれる`size`は領域の広さを示す

* `UIScreen.mainScreen()`で取得できるオブジェクトは **端末の画面** のそれであると決められている

* * *

**A2** : `[xxxx]()`の意味

**`xxxx`型の空の配列を作成している**

以下のように書くと「`xxxx`型の配列を作成し、空の配列で初期化」となる

[code]

    var array: [xxxx] = [] // arrayは任意の変数名
    
[/code]

以下のように書くと「型が未定な変数を作成し、`xxxx`型の空の配列で初期化」となる

[code]

    var array = [xxxx]()
    
[/code]

結果、どちらも同様に`xxxx`型の配列が作成される


CC BY-SA 3.0
2015-09-05T10:47:29.210
16290
2015-09-05T11:02:16.547
2015-09-05T11:02:16.547
16281
answer