2017-04-20 2 views
3

방금 ​​기존 코드가 많은 프로젝트에 참여했습니다. 이전 프로그래머는 Swift에 익숙하지 않았거나 Swift 언어의 초기 단계에서 개발을 시작했습니다. 그들은 이상한 방법으로 if let 진술을 사용하는 것 같았다. 그들은 성명서를 if is let으로 사용하고 싶어하는 것 같았습니다. 값 유형 String 나에게 여분의 것 인 경우스위프트 (Swift) : 여분의 경우

// In JSON parser 

if value is String, let string = value as? String { 
     document.createdBy = string 
} 

먼저 확인 : 내가 코드를 편집하기 전에 이에 대한 유효한 사용이 있는지 알고 싶습니다. 성명서의 let string = value as? String 부분에서 이것을 신속히 점검하지 않습니까?

질문

이유는 이러한 요구를 두 번 확인하는 것? 아니면 이것에 대한 이유가 있을까요?

+5

네 말이 맞아. 그냥 바보 야. 그것을 모방하지 마십시오. (그런데 질문에 "선택적 연결"이 없습니다.) – matt

+1

당신이해야 할 상황을 볼 수 없습니다. 만약 변수가'String'이라면,'as '로 그것을 캐스팅 할 필요가 없습니다. String'이므로 변수가'String'이면 오른쪽 조건이 중복됩니다. 'String'이 아니라면 (캐스팅하기를 원할 것입니다.) 왼쪽 조건은 false를 반환하므로 캐스트가 발생하지 않습니다. – Paolo

+2

@matt 당신 말이 맞아요. 나는 단지 그 제목을 가로 질러 그 점을 알 수있는 다른 것을 알지 못했다. 나는 나의 타이틀을 업데이트했다. –

답변

1

네 말이 맞아, 이건 중복이야. value이 문자열이 아니면 value as? Stringnil을 반환하며 조건부 바인딩은 실패합니다.

는 유형을 확인하고 주조 결과를 사용하지 않으려면 :

if value is String { 
    // Do something that doesn't require `value` as a string 
} 

이 유형을 확인하고 결과를 사용하려면 : 모두가 이해되지 않는다 이렇게

if let value = value as? String { // The new name can shadow the old name 
     document.createdBy = value 
} 

합니다.

관련 문제