Swift 선택적 유형


Swift의 Optional 유형, 누락된 값을 처리하는 데 사용됩니다. Optional은 "거기에 값이 있고 x와 같습니다" 또는 "거기에 값이 없습니다"를 의미합니다.

Swfit 언어 정의 접미사? Optional이라는 이름의 유형을 간략하게 표현하면 다음 두 선언이 동일합니다.

var optionalInteger: Int?
var optionalInteger: Optional<Int>

두 경우 모두, optionInteger 변수는 선택적 정수 유형입니다. 유형과 ? 그들 사이에는 공간이 없습니다.

Optional은 값이 있을 수도 있고 없을 수도 있음을 나타내는 데 사용되는 None과 Some(T)의 두 가지 사례가 있는 열거형입니다. 모든 유형은 선택적 유형으로 명시적으로 선언(또는 암시적으로 변환)될 수 있습니다. 옵셔널 타입을 선언할 때 반드시 괄호를 사용할까요? 운영자에게 적합한 범위. 예를 들어 선택적 정수 배열을 선언하려면 (Int[])?로 작성해야 하며, Int[]?로 작성하면 오류가 보고됩니다.

초기 값을 제공하지 않고 선택적 변수나 선택적 속성을 선언하면 해당 값의 기본값은 nil이 됩니다.

선택적 옵션은 LogicValue 프로토콜을 따르므로 부울 환경에 나타날 수 있습니다. 이 경우 선택적 유형 T?에 T 유형의 값이 포함되어 있으면(즉, 해당 값이 Optional.Some(T)) 선택적 유형은 true이고, 그렇지 않으면 false입니다.

선택적 유형의 인스턴스에 값이 포함되어 있으면 후위 연산자를 사용할 수 있습니다! 이 값에 다음과 같이 접근하려면:

optionalInteger = 42
optionalInteger! // 42

연산자를 사용하세요! nil 값으로 선택적 변수를 검색하면 런타임 오류가 발생합니다.

옵셔널 체인 및 옵셔널 바인딩을 사용하여 옵셔널 표현식에 대한 작업을 선택적으로 수행할 수 있습니다. 값이 nil이면 작업이 수행되지 않으며 런타임 오류가 보고되지 않습니다.

Swift에서 옵션 유형의 적용을 이해하기 위해 다음 예를 자세히 살펴보겠습니다.

import Cocoa

var myString:String? = nil

if myString != nil {
    print(myString)
}else{
    print("字符串为 nil")
}

위 프로그램의 실행 결과는 다음과 같습니다.

字符串为 nil

옵션 유형은 포인터의 nil 값과 유사합니다. Objective-C는 nil이 클래스에만 적용되는 반면 옵션은 모든 유형에 사용 가능하고 더 안전합니다.


강제 구문 분석

옵션 유형에 실제로 값이 포함되어 있음을 확인한 후 옵션 이름 뒤에 느낌표(!)를 추가하여 값을 가져올 수 있습니다. 이 느낌표는 "이 옵션에 값이 있다는 것을 알고 있습니다. 이를 사용하십시오."를 의미합니다. 이를 옵션 값 강제 풀기라고 합니다.

예제는 다음과 같습니다.

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if myString != nil {
   print(myString)
}else{
   print("myString 值为 nil")
}

위 프로그램의 실행 결과는 다음과 같습니다.

Optional("Hello, Swift!")

옵션 값을 강제로 구문 분석하려면 느낌표(!)를 사용합니다.

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if myString != nil {
   // 强制解析
   print( myString! )
}else{
   print("myString 值为 nil")
}

위 프로그램의 실행 결과는 다음과 같습니다.

Hello, Swift!

참고:
!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil 값을 사용하세요.


자동 파싱

옵션 변수 선언 시 물음표(?)를 느낌표(!)로 바꿀 수 있습니다. 이렇게 하면 선택적 변수를 사용할 때 값을 얻기 위해 느낌표(!)를 추가할 필요 없이 자동으로 해결됩니다.

예제는 다음과 같습니다.

import Cocoa

var myString:String!

myString = "Hello, Swift!"

if myString != nil {
   print(myString)
}else{
   print("myString 值为 nil")
}

위 프로그램의 실행 결과는 다음과 같습니다.

Hello, Swift!

옵션 바인딩

옵션 바인딩을 사용하여 옵션 유형에 값이 포함되어 있는지 확인하세요. 값이 있으면 임시 상수나 변수에 값을 할당하세요. 선택적 바인딩은 if 및 while 문에서 선택적 값을 평가하고 해당 값을 상수나 변수에 할당하는 데 사용할 수 있습니다.

if 문에 다음과 같이 선택적 바인딩을 작성합니다.

if let constantName = someOptional {
    statements
}

간단한 선택적 바인딩 예를 살펴보겠습니다.

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if let yourString = myString {
   print("你的字符串值为 - \(yourString)")
}else{
   print("你的字符串没有值")
}

위 프로그램의 실행 결과는 다음과 같습니다.

你的字符串值为 - Hello, Swift!