[Swift] 기초(3/5) - 옵셔널, 구조체, 클래스
글 작성자: 만렙개발자
1. 옵셔널
- 값이 있을 수도 있고, 없을 수도 있다.
- nil의 가능성을 명시적으로 표현 (문서화 필요 X)
- 전달받은 값이 옵셔널이 아니라면, nil 체크할 필요가 없음 (=예외처리할 필요 없음)
- 옵셔널이 아닌 상수에 nil을 할당하면 컴파일 오류
// 옵셔널은 다음과 같이 enum과 general을 이용하여 선언되어 있음
enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none // 옵셔널에 값이 없다 (열거형이기에 switch case문으로 구성)
case some(Wrapped) // 옵셔널에 값이 있다
}
let optionalValue: Optional<Int> = nil
let optionalValue: Int? = Int // 위와 동등한 표현
func exFunction(optionalParameter: Int?) {
// something
}
// 기존 변수처럼 사용 불가
optionalValue = optionalValue + 1 // [Error] 다른 타입이기에
2) 암시적 추출 옵셔널 (Implicitly Unwrapped Optional)
- 기존 변수처럼 사용 가능
// 기존 변수처럼 사용 가능
optionalValue = optionalValue + 1
// nil 할당 가능
optionalValue = nil
// 런타임 오류 발생
optionalValue = optionalValue + 1 // [Error] nil + 1 ?
3) 옵셔널 추출 (Optional Unwrapping)
- 옵셔널을 어떻게 꺼내서 사용하는지, 활용하는지
- 옵셔널 바인딩 (Optional Binding): nil check & unwrap (value extraciton)
var source: String! = "src.jpg"
var result: String! = nil
if let src: String = source, let res = result {
print("\(src) to \(res)")
} else {
print("source == nil")
}
2. 구조체
- 구조체는 값(value) 타입
- 관련있는 값들을 모아서 하나의 데이터 타입으로 표현하고 싶은 경우
- 상속이 필요 없는 경우
- 상속이 불가능
- 대부분의 타입이 구조체로 이루어져 있음
struct Desert {
var mutableProperty: Int = 1
let immutableProperty: Int = 2
static var typeProperty: Int = 3
func instanceMethod() {
print("instance method is called")
}
}
var mutable: Calendar = Calendar()
3. 클래스
- 클래스는 참조(reference) 타입
- Swift에서는 다중 상속을 허용하지 않음
- 대부분의 Apple 프레임워크는 클래스로 이루어져 있음
class Desert {
var name: String = ""
var `kind`: String = "Cake"
func printNameKind() {
print("이 디저트는 \(name) \(self.kind)입니다.")
}
}
var bf: Desert = Desert()
bf.name = "black forest"
bf.printNameKind()
'👾 잔잔바리 > Swift' 카테고리의 다른 글
[Swift] 기초(2/5) - 조건문, 반복문, 제어전달문, 클로저, 열거형 (0) | 2020.06.12 |
---|---|
[Swift] 기초(1/5) - 욕심쟁이 스위프트와 변수와 상수, 기본 데이터 타입 및 컬렉션 (0) | 2020.06.10 |
VS code에서 swift 개발하기 (Visual Studio code에서 스위프트 컴파일) (0) | 2020.06.10 |
댓글
이 글 공유하기
다른 글
-
[Swift] 기초(2/5) - 조건문, 반복문, 제어전달문, 클로저, 열거형
[Swift] 기초(2/5) - 조건문, 반복문, 제어전달문, 클로저, 열거형
2020.06.12 -
[Swift] 기초(1/5) - 욕심쟁이 스위프트와 변수와 상수, 기본 데이터 타입 및 컬렉션
[Swift] 기초(1/5) - 욕심쟁이 스위프트와 변수와 상수, 기본 데이터 타입 및 컬렉션
2020.06.10 -
VS code에서 swift 개발하기 (Visual Studio code에서 스위프트 컴파일)
VS code에서 swift 개발하기 (Visual Studio code에서 스위프트 컴파일)
2020.06.10