// 파라미터가 없는 init 의 단일 초기화 구문을 정의
struct Fahrenheit {
var temperature: Double
init() {
temperature = 32.0
}
}
var f = Fahrenheit()
print("\(f.temperature)°") // 32.0°
// 기본값을 제공하면 더 간단하게 작성할 수 있다
struct Fahrenheit {
var temperature = 32.0
}
초기화의 정의 부분에 초기화 파라미터 (initialization parameters) 를 제공할 수 있다
struct Celsius {
var temperatureInCelsius: Double
//파라미터 Argument Labels 라벨 모두 사용 가능
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
}
let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
// boilingPointOfWater.temperatureInCelsius is 100.0
let freezingPointOfWater = Celsius(fromKelvin: 273.15)
// freezingPointOfWater.temperatureInCelsius is 0.0
nil
값으로 초기화struct Size {
var width = 0.0, height = 0.0
}
let twoByTwo = Size(width: 2.0, height: 2.0)
// 기본값을 가지는 모든 프로퍼티의 값은 생략가능
let twoByTwo = Size(width: 2.0)
Size
구조체는 자동으로 새로운 Size 인스턴스를 초기화 하기 위해 사용할 수 있는 init(width:height:)
멤버별 초기화 구문을 받음self.init
을 사용self.init
을 호출가능struct Size {
var width = 0.0, height = 0.0
}
struct Point {
var x = 0.0, y = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
init() {}
init(origin: Point, size: Size) {
self.origin = origin
self.size = size
}
init(center: Point, size: Size) {
let originX = center.x - (size.width / 2)
let originY = center.y - (size.height / 2)
self.init(origin: Point(x: originX, y: originY), size: size)
}
}