swift
-
swift - Inheritance and Polymorphism #1 (Inheritance, Final Class, override, Upcasting, Downcasting)swift 2021. 1. 12. 12:34
Inheritance 네 군데 모두 동일한 속성을 선언하면 매우 불합리한 코딩 공유되는 속성을 하나 선언하고 네개의 클래스가 하나의 속성을 상속받아서 사용 swift는 다중상속을 지원하지 않고 protocal을 사용해서 해결 // BaseClass class Figure { var name = "Unknown" init(name: String) { self.name = name } func draw() { print("draw \(name)") } } class Cirlce: Figure { var radius = 0.0 var diameter: Double { return radius } override func draw() { super.draw() print("radius \(radius)") } ..
-
swift - Method and Subscript #3 (Subscript)swift 2021. 1. 12. 12:20
let list = ["A", "B", "C"] list[0] // 이런게 바로 Subscript // Subscript 직접 구현 // parameter에 제한은 없지만 두개 이하로 보통 선언 // 입출력 파라미터 선언 불가능 // 파라미터 생략 불가능 // returnType은 subscript에서 중요 : subscript를 통해 리턴되는 형식인 동시에 저장하는 값의 형식임 -> 생략불가능 // get, set 블록은 computed와 동일 class List { var data = [1, 2, 3] func aa() { print(data[1]) } subscript(index: Int) -> Int { get { return data[index] } set { data[index] = newVa..
-
swift - Method and Subscript #2 (Type Method)swift 2021. 1. 12. 11:56
class Circle { static let pi = 3.14 var radius = 0.0 func getArea() -> Double { return radius * radius * Circle.pi } static func printPi() { print(pi) } class func printPiPi() { print(pi) } } Circle.printPi() class StrokeCircle: Circle { // static 키워드는 override할 수 없음 // override static func printPi() { // print(pi) // } override static func printPiPi() { print(pi) } }
-
swift - Method and Subscript #1 (Instance Method)swift 2021. 1. 12. 11:44
// method는 특정형식에 속한 함수 // 이전에 공부한 것과 위치 차이점만 있음 class Sample { var data = 0 static var sharedDate = 123 func doSomething() { print(data) Sample.sharedDate } func call() { doSomething() } } let a = Sample() a.data a.doSomething() a.call() Sample.sharedDate class Size { var width = 0.0 var height = 0.0 func enlarge() { width += 1.0 height += 1.0 } } let s = Size() s.enlarge() struct Size2 { var wi..
-
swift - Property #5 (self, &, super)swift 2021. 1. 12. 11:35
// self : 인스턴스 멤버 내부에서 접근하면 해당 인스턴스에 접근, 타입 멤버 내부에서 접근하면 형식 자체에 접근 // self.propertyName : 인스턴스 속성에 접근할때 // self.method() : 인스턴스 메소드를 호출할때 대부분 self와 .을 생략 // self[index] : 서브스크립트에 접근할때 사용 // self.init(parameters) : 동일한 형식에 있는 다른 생성자를 호출할 때 사용 self 생략 불가능 class Size { var width = 0.0 var height = 0.0 func calcArea() -> Double { // self. 생략가능 return self.width * self.height } var area: Double { // ..
-
swift - Property #4(Type Property, Type Computed Property)swift 2021. 1. 12. 11:24
// 형식 속성 // 하나의 메모리를 모두 공유한다. // 형식 속성은 인스턴스 속성이 아니기때문에 인스턴스로 접근 불가능 class Math { static let pi = 3.14 } let m = Math() // pi는 형식 속성이기 때문에 // 형식속성은 기본적으로 lazy 타입이다. : 즉, 접근 하는 순간 초기화된다. Math.pi // instance속성이 아니기 때문에 이렇게 접근 불가능 //m.pi // static 키워드 대신 class 키워드로 사용할때는 class에서 제한적으로 사용된다. // static 키워드는 서브 클래스에서 오버라이딩이 금지되는데 class는 가능 enum Weekday: Int { case sunday = 1, monday, tuesday, wednesda..
-
swift - Propery #3 (Property Observer)swift 2021. 1. 12. 11:15
// 속성 감시자 // wilSet : 속성이 저장되기 직전에 호출됨, 파라미터 생략하면 newValue // didSet : 속성에 값이 저장된 후 호출됨, 파라미터 생략하면 oldValue // var만 사용 가능 // 지연저장 속성과 계산속성에는 속성 감시자를 추가 불가능 // 그렇다고 속성을 감시할수 없는 것은 아님 지연 저장속성의 경우 초기화 코드에서, 계산 속성에서는 set 블록에서 필요한 코드를 구현한다. // 계산속성에서는 한가지 예외가 있는데 서브클래스에서 계산속성을 오버라이딩하고 여기서 프로퍼티 옵저버를 구현하는 것은 가능 // wilSet 블록과 didSet블록 중 반드시 하나는 구현해야 속성 감시자가 된다. class Size { var width = 0.0 { willSet { p..