반응형
안녕하세요~! 오늘은 Swift5.1에서 새롭게 변경된 사항들을 정리해보려고 하는데요
첫 번째로 멤버셜 초기화(memberwise initializer)시 기본값 합성에 대해서 알아보려고 합니다.
어떻게 달라졌는데 함께 알아보시죠~!
기본적인 구조체 강아지를 만들었습니다.
struct Dog {
var age: Int
var name: String
}
컴파일러에서는 아래와 같이 초기화를 합성합니다.
init(age: Int, name: String)
그런데 만약 모든 강아지의 나이에 0으로 초기값을 갖는다고 가정 하고 인스턴스를 생성 했습니다.
하지만 인스턴스 생성시 Swift 컴파일러가 초기 값이 있는 속성에 대한 기본값을 생성할 수 없기 때문에 에러가 발생합니다.
struct Dog {
var age: Int = 0
var name: String
}
// error!!
let sparky = Dog(name: "Sparky")
어쩔수 없이 아래처럼 init을 선언해서 구현해야만 했습니다.
struct Dog {
var age: Int = 0
var name: String
init(age: Int = 0, name: String) {
self.age = age
self.name = name
}
}
Swift5.1에서는 안에 구현체를 구현하지 않고 선언만으로도 구현될 수 있도록 하였습니다.
struct Dog {
var age: Int = 0
var name: String
// 컴파일러가 알아서 멤버 init생성
init(age: Int = 0, name: String)
}
let sparky = Dog(name: "Sparky") // Dog(age: 0, name: "Sparky")
아래 구조체에서 상수값 d(let d: Bool = true)는 이미 초기화 되어있기에 멤버별 init에서 가져오지 않습니다.
struct Alphabet {
var a: Int = 97
let b: String
var c: String = "c"
let d: Bool = true
var e: Double = Double.random(in: 0 ... .pi)
// 컴파일러가 알아서 멤버 init생성
init(
a: Int = 97,
b: String,
c: String = "c",
e: Double = Double.random(in: 0 ... .pi)
)
}
오늘은 여기까지 입니다. 감사합니다~!!
참조:
https://github.com/apple/swift-evolution/blob/main/proposals/0242-default-values-memberwise.md
반응형
'Apple > Apple_Swift' 카테고리의 다른 글
Swift 5.1 Static and class subscripts (SE-0254) (0) | 2023.03.17 |
---|---|
Swift5.1 불투명 타입 (Opaque type) some Type SE-0244 (0) | 2023.01.20 |
Swift5.0 SE-0225 배수 구하기 isMultiple(of:) (0) | 2023.01.11 |
Swift5.0 중첩된 Optionals(??) 평면화 하기 SE-0230 (0) | 2023.01.10 |
Swift5.0 향후 변경 될 수 있는 Enum(열거형) switch @unknown 속성 처리 SE-0192 (0) | 2023.01.03 |