2017-11-18 6 views
2

두 개의 물음표가 사용 된 Swift 구문이 나타났습니다 ("??"). 예를 들어 "??"의 의미는 무엇입니까? 신속하게?

, let val = something["something"] as? String ?? nil

가 정확히 무엇을 의미합니까 ? 이 구문에 대한 몇 가지 유스 케이스는 무엇입니까?

+2

그것은 nil coalescing operator로 불려지지만, 만약 당신이'nil'을 넘겨 준다면 어떤 의미가 없습니다. –

+0

결과 개체는 선택 사항입니다. 문자열 –

+0

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID72 – jtbandes

답변

2

무기 호 - 합체 운영자는

그것은이 짧은 형태의 종류입니다.

let val = (something["something"] as? String) != nil ? (something["something"] as! String) : "default value" 

무풍 병합 연산자 (A ?? 나)는 값이 포함 된 경우 옵션을 펼쳤다 또는를 반환 (something["something"]nil 또는 선택 사양 인 경우 기본값 nil 또는 다른 값을 할당 할 수 있습니다 의미) a가 nil 인 경우 기본값 b입니다. 표현식 a는 항상 선택적 유형입니다. 표현식 b는 a에 저장된 유형과 일치해야합니다. !

A = 무 :

-NIL로 병합 연산자는 다음 코드 속기? 에이! : b 위의 코드는 삼항 조건 연산자와 강제적 인 언 래핑 (a!)을 사용하여 a가 nil이 아닐 때 wrapped 된 값에 액세스하고, 그렇지 않으면 b를 반환합니다. nil-coalescing 연산자는이 조건부 검사와 언 래핑을 간결하고 읽기 쉬운 형식으로 캡슐화하는보다 우아한 방법을 제공합니다.

a의 값이 nil이 아닌 경우 b 값은 평가되지 않습니다. 이것을 단락 평가라고합니다.

아래의 예는 기본 색 이름과 선택적 사용자 정의 색상 이름 사이에서 선택하는 무풍 병합 연산자를 사용

let defaultColorName = "red" 
var userDefinedColorName: String? // defaults to nil 

var colorNameToUse = userDefinedColorName ?? defaultColorName 
// userDefinedColorName is nil, so colorNameToUse is set to the default of "red" 

항을 참조 Nil-Coalescing Operator here

+0

'let val = something [ "something"]? String! = nil? 뭔가 [ "무언가"]! 문자열 : "default value"' –

+1

감사합니다. 나는 그것을 놓쳤습니다. 대답을 업데이트했습니다. – Bilal

+0

''기본값 ''으로 갱신되었습니다. 감사. – Bilal

1

이 스위프트의 Nil-Coalescing Operator입니다. 그 은 값을 포함하거나, 무기 호이면 B A 디폴트 값을 반환하면

Nil-Coalescing Operator

NIL로 - 유착 연산자 (A? B는) 선택적을 펼쳤다. 표현식 a는 항상 선택적 유형입니다. 식 b는 과 일치해야합니다.

하지만 당신의 예에서 이미 바인딩을 선택하여, 그래서 조건을 실패 할 경우, 옵션으로 ??를 사용할 필요가 다음 자동 nil를 할당하지

. something["something"]String를 제공하지 않을 경우 여기
let val = something["something"] as? String ?? nil 

, something["something"] as? String는 이미 nil 할당합니다. 이 연산자는 여기에 필요 없습니다.

1

이 연산자는 일반적으로 할당 된 표현식이나 변수가 선택적 결과를 생성 할 때 기본값을 제공하는 데 사용됩니다.예를 들면 다음과 같습니다

let i: Int? = 5 
let j: Int? = nil 

let value1 = i ?? 9 //value1 will be 5 non-optional 
let value2 = j ?? 9 //value2 will be 9 non-optional 

당신이 올바른 구문 있지만 제공 한 예는 결과에 아무런 결과가없는 것 ?? nil를 생략으로, 중복입니다.

+0

네, 그렇기 때문에 그것을 쓰는 데는 아무런 이유가 없습니다 – Pranshu