Swift에서 모든 변수는 값으로 설정되어야하며 선택 사항을 사용하여 nil
초기에 설정할 변수를 설정할 수 있음을 이해 합니다.
내가 이해하지 못하는 것은 a로 변수를 설정하는 것이 무엇을 하는가 !
하는 것입니다. 왜냐하면 이것이 옵션에서 값을 “언 래핑”한다는 인상을 받았기 때문입니다. 그렇게함으로써 해당 변수에 풀릴 값이 있음을 보장한다고 생각했습니다. 이것이 IBActions에서 사용되는 이유입니다.
간단히 말해, 다음과 같이 할 때 초기화되는 변수는 무엇입니까?
var aShape : CAShapeLayer!
그리고 왜 / 언제 이것을할까요?
답변
형식 선언 !
에서는 ?
. 둘 다 선택 사항이지만 !
은 ” 암시 적으로 래핑되지 않은”선택 사항입니다 . 즉, 값에 액세스하기 위해 래핑 을 풀지 않아도됩니다 (하지만 여전히 nil 일 수 있음).
이것은 기본적으로 우리가 이미 object-c에서 가졌던 행동입니다. 값 은 nil 일 수 있으며 확인해야하지만 선택 사항이 아닌 것처럼 값에 직접 액세스 할 수도 있습니다 (중요한 차이점은 nil을 확인하지 않으면 런타임 오류)
// Cannot be nil
var x: Int = 1
// The type here is not "Int", it's "Optional Int"
var y: Int? = 2
// The type here is "Implicitly Unwrapped Optional Int"
var z: Int! = 3
용법:
// you can add x and z
x + z == 4
// ...but not x and y, because y needs to be unwrapped
x + y // error
// to add x and y you need to do:
x + y!
// but you *should* do this:
if let y_val = y {
x + y_val
}