2017-10-13 8 views
0

なぜ機能体内にプロパティのデフォルト値を指定する必要はありませんか?

let identifier: String 

のは、私はこの機能を無効にしているとしましょう、それの体の中に、私はデフォルト値なしでプロパティを定義し、なぜ迅速な私は、このプロパティのデフォルト値を提供スキップすることができますか?

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let identifier: String 
    if indexPath.item == 1 { 
     identifier = trendingCellId 

    } else if indexPath.item == 2 { 
     identifier = subscriptionCellId 
    } else { 
     identifier = cellId 
    } 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath) 

      return cell 
} 
+0

https://stackoverflow.com/a/28444671/1187415も参照してください。 –

答えて

0

Swiftで変数を宣言するときに値を指定する必要はありません 後でコードに値を割り当てることができます。 これにアクセスする前に、これにアクセスする必要があります。

  • オプション変数:実行時エラーが発生します。
  • オプションの変数:あなたはnilを取得します。
+0

"*そうでなければNULLです*" - いいえ、それは初期化されていません。値は未定義です。しかし、コンパイラは、変数が初期化される前に変数にアクセスするのを防ぎます。したがって、これは本当の懸念事項ではありません。 – Hamish

+0

この回答の文言は混乱し、誤解を招きます。最初の文には、「Swiftで変数を宣言するときに値を指定する必要はありません」と記載する必要があります*。初期化は、最初の値を変数に代入する行為です。したがって、変数を初期化するときに値を指定する必要はないと言っても意味がありません。また、初期化されていない変数にアクセスしようとすると、 'NULL'を取得しません。代わりに、コンパイラエラーが発生します。 – rmaddy

+0

あなたは絶対に正しいです、@rmaddy。私は私の文章を変更しました。 – Akaino

1

重要なことは、変数に型を指定し、次の行で値を初期化することです。したがって、宣言は合法です。

このような構成は「条件付き初期化」と呼ばれ、状況(状況)に応じて変数を異なる方法で初期化することができます。これは非常に便利な機能であり、定数の場合でも有効です。

+0

ここで私の議論でカバーしています:http://www.apeth.com/swiftBook/ch03.html#_variable_declaration – matt

+0

ありがとう!だから私はこのプロパティを使用しません(しかし、何らかの理由であなたがその文字列をputted(String:let let identifier:String))合法であることが判明しましたか? –

2

使用前に初期化しているので、すべての点で問題ありません。 if,else ifおよびelseは、プロパティを初期化しています。 else部分を削除すると、コンパイラにエラーが表示されます。

関連する問題