2016-08-25 3 views
1

변수 A에 대한 단일 물음표 대신 이중 물음표를 넣으면 Xcode의 놀이터에서 nil을 반환하는 이유를 알려줄 수 있습니까? 오버플로 결과는 64가 아니어야합니다.신속한 연산자를 병합하지 않으면 이상한 결과가 발생합니다.

스위프트 버전 2.2 엑스 코드 버전 7.3.1, OS X의 버전 10.11.6

import Cocoa 

    var b: Int8 
    var c: String? = "128" 
    var a: Int8?? = Int8(c!) 

    b = 64 

    func nilCoalescing() { 
     a != nil ? a! : b 
    } 

    nilCoalescing() 
+5

함수가 아무 것도 반환하지 않습니다. 어디에서나 nil 통합 연산자를 사용하지 않습니다. –

+0

하지만 var a : Int8? = Int8 (c!)는 64를 반환합니다. –

+1

이것은 nil 병합 연산자를 사용하는 방법이 아닙니다. 당신은'var a : Int8 (c!) '와 같은 것을 원할 것입니다. "아마 넘쳐". – brandonscript

답변

2

여기서 살펴 봐야 할 것들이 많다 :

  1. a 오버 플로우, 128Int8 (Int8.max = 127)에 저장 될 수있는 최대 값보다 큰 becaue, 따라서 그것은 nil를 돌아갑니다.

    nil

    , Optional.None 일명 유형 Optional<Int8>이다는 a의 유형 주석에 의해 지정된 유형 (Int8??, 일명 Optional<Optional<Int8>>)하지, 그래서 이제 올바른 유형 Optional.Some(Optional.None)을지고, 다른 옵션에 싸여.

  2. nilCoalescing() 아무 것도 반환하지 않습니다. (실제로 어떤 의미가 별칭으로 Void, () 반환)

  3. 이 명시 적 nil 체크 힘 언랩 (!)하지 마십시오 a != nil ? a! : b합니다. 대신 ?? 사용 a ?? b

정확하게 당신이 여기서 뭘하려고 무엇

?

+0

"이 nil, a.k.a. Optional.None은 다른 옵션으로 싸여 있으므로 Optional.Some (Optional.None)이됩니다."이것은 OP의 혼동을 일으키는 열쇠 일 것입니다. –

+0

@JoshCaswell 그건 내가 용의자지만 솔직히 모르겠다. 이것은 모두 꽤 무의미한 lol입니다 – Alexander

+0

나는 두 번 nil을 할당하려고했습니다. –

3

128 오버 플로우가 전무로 저장되도록 변환 INT8.

관련 문제