*** 계속해서 수정 중입니다.
func
대신 init
사용// 클래스 이니셜라이저
class ClassName {
init() {
// 초기화 코드
}
}
// 구조체 이니셜라이저
struct StructName {
init() {
// 초기화 코드
}
}
// 열거형 이니셜라이저
enum EnumName {
case caseName
init() {
// 열거형은 초기화에서 반드시 모든 case를 포함해야 함
self = .caseName
// 초기화 코드
}
}
init()
실행될 때 하는 거지init()
에서 초깃값 설정 안 해줘도 자동 초기화 됨// 초깃값을 설정하는 방법들
struct Area {
var squareMeter: Double
init() {
squareMeter = 0.0 // init에서 초깃값 할당
}
// ---------------------- 또는 ----------------------
var squareMeter: Double = 0.0 // 프로퍼티 기본값 할당
}
// 호출부
let room: Area = Area()
print(room.squareMeter) // 0.0
struct Area {
var squareMeter: Double
init(fromPy py: Double) {
squareMeter = py * 3.3058
}
init(fromSquareMeter squareMeter: Double) {
self.squareMeter = squareMeter
}
init(value: Double) {
squareMeter = value
}
init(_ value: Double) {
squareMeter = value
}
}
let roomOne: Area = Area(fromPy: 15.0)
print(roomOne.squareMeter) // 49.587
let roomTwo: Area = Area(fromSquareMeter: 33.06)
print(roomTwo.squareMeter) // 33.06
let roomThree: Area = Area(value: 30.0)
print(roomThree.squareMeter) // 30.0
let roomFour: Area = Area(55.0)
print(roomFour.squareMeter) // 55.0
Area() // 오류 발생
init()
은 별도로 구현하지 않는 이상 사용할 수 없음(_)
은 와일드카드 식별자라고 부른다class Person {
var name: String
var age: Int?
init(name: String) {
self.name = name
}
}
let danna: Person = Person(name: "Danna")
print(danna.name) // Danna
print(danna.age) // nil
danna.age = 22
print(danna.age) // Optional(22)
if let age = danna.age {
print(age) // 22
}
danna.name = "Daniel"
print(danna.name) // Daniel