2016-09-02 4 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 같은; 이 일을 할 수있는 방법이 있습니까? 는 IF 블록의 코드에

+3

호 사용 상이한을 변수 이름 또는 "즉시 평가 된 종결". 그런데 왜 else case에서 구성되지 않은 셀을 만들고 반환하려고할까요? "누락 된 반환"오류 메시지가 표시되지 않도록 더 나은 옵션을 보려면 http://stackoverflow.com/questions/30189505/missing-return-uitableviewcell을 비교하십시오. –

+0

@MartinR 고마워요! 즉시 closure가 좋은 아이디어로 보인다고 평가되었습니다. else case의 경우, 유효한 코드를 만들기 위해 가장 짧은 템플릿을 사용했습니다. –

+0

@MartinR 당신의 링크를 보았습니다. 그렇습니다.'@noreturn' 함수는 더 우아한 템플릿으로 보입니다 –

답변

1

, 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 { 
     // ... 
    } 
관련 문제