2019년 1월 13일 일요일

Initialization

  Swift Programming Language Guide: Initialization, 코드부분



/** Initialization **/

/* Setting Initial Values for stored Properties */

// Initializers

struct Fahrenheit {
   var temperature: Double
   init() {
       temperature = 32.0
   }
}

var f = Fahrenheit()
print("The default temperature is \(f.temperature)º Fahrenheit")

/* Customizing Initialization */

// Initialization Parameters

struct Celsius {
   var temperatureInCelsius: Double
   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

let freezingPointOfWater = Celsius(fromKelvin: 273.15)
freezingPointOfWater.temperatureInCelsius

// Parameter Names and Argument Labels

struct Color {
   let red, green, blue: Double
   init(red: Double, green: Double, blue: Double) {
       self.red = red
       self.green = green
       self.blue = blue
   }
   init(white: Double) {
       red = white
       green = white
       blue = white
   }
}

let magenta = Color(red: 1.0, green:0.0, blue: 1.0)
let halfGray = Color(white: 0.5)

// Initializer Parameters Without Argument Labels

// Optional Property Types

class SurveyQestion {
   var text: String
   var response: String?
   init(text: String) {
       self.text = text
   }
   func ask() {
       print(text)
   }
}

let cheeseQuestion = SurveyQestion(text: "Do you like cheese?")
cheeseQuestion.ask()
cheeseQuestion.response = "Yes, I do like cheese."

// Assigning Constant Properties During Initialization

class SurveyQuestion {
   let text: String
   var response: String?
   init(text: String) {
       self.text = text
   }
   func ask() {
       print(text)
   }
}
let beetsQuestion = SurveyQuestion(text: "How about beets?")
beetsQuestion.ask()
beetsQuestion.response = "I also like beets. (But not with cheese.)"

/* Default Initializers */

class ShoppingListItem {
   var name: String?
   var quantity = 1
   var purchased = false
}
var item = ShoppingListItem()

// Memberwise Initializers for Structure Types

struct Size {
   var width = 0.0, heigth = 0.0
}

let twoByTwo = Size(width: 2.0, heigth: 2.0)

/* Initializer Delegation for Value Types */

struct Size {
   var width = 0.0, heigth = 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.heigth / 2)
       self.init(origin: Point(x: originX, y: originY), size: size)
   }
}

let basicRect = Rect()
let originRect = Rect(origin: Point(x: 2.0, y: 2.0), size: Size(width: 5.0, heigth: 5.0))
let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size.init(width: 3.0, heigth: 3.0))