2016-06-08 5 views
2

수정 :선택 바인딩 기능은 선택 체인과 어떻게 다릅니 까?

나는 Raywenderlich의 튜토리얼을 통해 학습하고 있습니다. 내 질문은 왜 우리는 선택적 바인딩, 즉 if let을 사용 하는가? 선 A & B와 비슷한 선택 체인을 사용할 수없는 이유는 무엇입니까?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("IconCell", forIndexPath: indexPath) 
    let icon = icons[indexPath.row] 

    cell.textLabel?.text = icon.title // Line A 
    cell.detailTextLabel?.text = icon.subtitle // Line B 

    if let imageView = cell.imageView, iconImage = icon.image { //Line C 
     imageView.image = iconImage 
    } 

강사의 설명은 다음과 같습니다

때 우리 예를 우리는 문자열을 기반으로 이미지에 대한 참조를 가져 아이콘 ... 어떤 이유에서 그 이미지가 번들에 포함되어 있지 않은 경우, 이름이 변경되거나 삭제 된 경우 아이콘에 이미지가 연결되지 않을 수 있습니다. let이 있는지 확인하려면 let을 사용해야합니다.

아직 차이점을 이해하지 못합니다. 하지-전무는

cell.imageView 경우 icon.image이 전무는 동안

+1

바인딩을 사용하면 else 문을 사용할 수 있습니다. 그 외의 경우에는 귀하의 케이스에 큰 차이가 보이지 않습니다. – Jared

+0

@ 자레드 그게 전부입니까? 그리고 당신이 else 문에 아무것도 넣지 않으면, 거기에 어떤 이점이 있습니까? – Honey

+0

if let 문에서도 더 이상 선택적 체인을 사용할 필요가 없습니다. 여러 줄의 코드를 작성하는 것이 좋습니다. 그 외에는 실제로 이점이 없습니다. – Jared

답변

5

당신이

cell.imageView?.image = icon.image // let's call this Line D 

생각하는 경우이, 라인 C.에 동일하지이다, 라인 D는의 원본 이미지를 지워집니다 이미지 뷰를 nil로 설정하여

그러나 C 행에서는 조건을 입력하지 않으므로 icon.image이 nil이더라도 원본 이미지가 유지됩니다.

라인 C는 내가 당신의 교수가 단지 더 명시 적으로 만들 싶은 생각

if let image = icon.image { 
    cell.imageView?.image = image 
} 

에 해당합니다.

+0

라인 A, B도 지우지 않을 것인가? 'let let '라고 쓰면 어떨까요? 또한'cell.imageView'가 어떻게 nil이 될 수 없습니까? 그것은 바로 여기에 설정 될 것입니다. 의미가 전혀 없습니다. – Honey

+0

@Honey : (1) 그렇습니다. 그러나 아이콘 유형의 선언을 검사해야하는데, 'String?'대신 'String'으로 선언 될 수 있습니다. (2) 스토리 보드를 사용하는 경우, 셀을 인터페이스 빌더의 이미지 뷰에 연결할 때'cell.imageView'가 지정됩니다. – kennytm

+0

** 1) ** C 행은 어떻게 읽습니까? 그것은 다음과 같이 읽습니까? * cell.imageView가 nil이 아니고 icon.image도 nil이 아닌 경우 imageView.image를 icon.Image와 동일하게 만듭니다. ie iconImage *? ** 2) ** 우리가'cell.ImageView'의 가치에 관심을 가져야하는 이유는, 값을 가지 든 갖지 않든'icon.image'로 설정한다는 것입니다. 'icon.image'가 값을 가지는지 여부 만 신경 쓰고 있습니다. 그것이 0이라면, 우리는 그것을 설정하고 싶지 않습니다 ... – Honey

관련 문제