2016-09-02 8 views
1

スコープ内にいくつかの変数(プロパティではない)があり、それを内部スコープで再定義すると、内部スコープから元の変数にアクセスする方法がありますか?次に例を示します。外部スコープのアクセス変数

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: UITableViewCell 
    if indexPath.section == 0 { 
     let cell = tableView.dequeueReusableCellWithIdentifier("awesomeCell", forIndexPath: indexPath) as! AwesomeTableViewCell 
     cell.delegate = self 
     <outscope>.cell = cell 
    } else { 
     cell = UITableViewCell() 
    } 
    return cell 
} 

<outscope>ここ性質のためselfのようなもの。これを行う方法はありますか?コードで

+3

番号使用異なって変数名または「直ちに評価された閉鎖」となります。 - しかし、なぜあなたはelse caseで未構成のセルを作成して返したいのですか? 「欠落した返品」エラーメッセージを回避するためのより良いオプションについては、http://stackoverflow.com/questions/30189505/missing-return-uitableviewcellを比較してください。 –

+0

@MartinRありがとう!即座に評価されたクロージャーはそれについての良いアイディアに見えます。それ以外のケースでは、私はちょうど有効なコードを作るために想像しているように、最短のテンプレートを使用しました。 –

+0

@MartinRあなたのリンクを見て、はい、 '@ noreturn'関数はよりエレガントなテンプレートに見えます –

答えて

1

、IF-ブロック内let cell = ...は外側 範囲から「非表示」または「影」cell変数を新しい変数 cellを導入します。私が知る限り、同じ名前の外部変数 にアクセスする言語機能はありません。

すぐ評価閉鎖、作成およびローカルスコープ内のセルを構成し、そしてバック外側範囲に 結果を渡す と同様の効果を得ることができる:

let cell: UITableViewCell 
    if indexPath.section == 0 { 
     cell = { 
      let cell = tableView.dequeueReusableCellWithIdentifier("awesomeCell", forIndexPath: indexPath) as! AwesomeTableViewCell 
      cell.delegate = self 
      return cell 
     }() 
    } else { 
     // ... 
    } 
関連する問題