2016-08-10 3 views
-2

선택적 변수를 설명하는 기사가 여러 개 있습니다.신속한 선택 값 명확화 사용법

그러나 나는 아직도 이런 종류의 예제로 명확하지 않다.

var metadata: AnyObject? 
metadata = ....... 
metadata?.getValue 
metadata!.getValue 

메타 데이터? 및 메타 데이터! 모두 런타임 오류없이 작동합니다. 누구나 차이점에 대해 설명해 주시겠습니까?

+0

http://stackoverflow.com/documentation/swift/247/optionals#t=201608102313446025323 – jtbandes

+0

에 대한 더 많은 읽을 수 있습니다 여기에 그것은 매우 바로 내가 찾고있는 무슨 대답 jtbandes , 감사합니다. –

답변

1

귀하의 예제에서 메타 데이터가 실제로 0 일 때 그 차이가 명확 해집니다.

이 코드를 사용하면 네 번째 줄이 충돌하지만 세 번째 줄은 충돌하지 않게됩니다. ? 운영자가 선택 사양 체인을 만들 수 있습니다 반면에 당신이 그것에 대해 자세한 내용을 원하는 경우 ! 연산자, 변수를 펼쳤다 때문에, 당신은 또 다른 유용한 운전자가 당신의 예에서 ??입니다 그것을 here

을 할 수있다 당신은 쓸 수있다 : 식의 왼쪽 부분이 전무 경우

metadata ?? "Another description" 

, 그것은 바로 하나를 반환합니다. 특정 상황에서 유용합니다.

2016년 8월 10일 코멘트 후 편집 : ??은 운영자을 병합 전무 라고, 그것은 이진 연산자입니다. 첫 x 째 인수는 선택적 유형이어야합니다. 첫 번째 인수가 안전하게 래핑 될 수 있는지 확인하고 성공하면 래핑되지 않은 값을 반환합니다. 첫 번째 값이 nil이면 두 번째 인수가 반환됩니다.

표현은

return x ?? y

if x != nil { 
    return x! 
} else { 
    return y 
} 

또는

return x != nil ? x! : y

에 해당의 우리가 두 개의 정수 그러나 때때로을 추가하는 기능을 만들고 싶어한다고 가정 해 봅시다 두 번째는, 그렇지 않으면 두 개의 정수를 추가, y이 합이 x + 0입니다 nil 경우 우리가

func add(x: Int, y: Int?) -> Int{ 
    return x + (y ?? 0) 
} 

를 작성할 수, nil이 될 수 있습니다. 이 기능의 수행 방법을보다 효율적으로 개선 할 수있는 방법이 있습니다. 당신은 Nil Coalescing Operator

+0

고마워요, 로드리고. 더 자세히 설명해 주셔서 감사합니다. ?? 운영자. –

+0

@HarriWestman 제 편집 된 대답을 읽어주세요 –

+0

다시 한번 감사드립니다, 정말 고맙습니다. 당신을위한 최고의 소원 !!! –