2016년 5월 17일 화요일

Swift - Class 기본

import Foundation

class Engine{
    var name:String
    
    // 클래스 초기화 함수
    init(initName:String){
        self.name = initName
    }
    
    init(){
        self.name = "Normal Engine"
    }
    
    func startEngine(){
        print ("Start Engine!")
    }
    
    func stopEngine(){
        print("Stop Engine")
    }
}

var myEngine = Engine(initName:"8기통")

class Tire{
    let name:String
    
    init(initName:String){
        name = initName
    }
}

var myTire = Tire(initName: "신발보다 타이어")

class Car{
    var engine:Engine
    var tire:Tire
    
    init(){
        engine = Engine(initName: "8기통 엔진!")
        tire = Tire(initName: "금호 타이어")
    }
    
    func Start() -> Bool{
        engine.startEngine()
        return true
    }
}

let car = Car()
car.engine.name
car.tire.name
let result = car.Start()

print(myEngine.name + " " + myTire.name)

class SuperEngine: Engine{
    var year:String     // 저장 Property
    
    var info:String{    // 연산 Property
        get {
            return name + year
        }
        set {
            let index = newValue.endIndex.advancedBy(-4)    // newValue setter 인자로 들어오는 값을 담는 변수
            year = newValue.substringFromIndex(index)
            name = newValue.substringToIndex(index)
        }
    }
    
    override init() {
        year = "0000"
        super.init()
        name = "Super Engine"
//        super.name = "Super Engine"
//        self.name = "Super Engine"
    }
    
    func speedUp(){
        print("Speed Up!")
    }
}

car.engine = SuperEngine()
car.engine.name

// 타입 캐스팅
var superEngine = car.engine as! SuperEngine
superEngine.speedUp()
superEngine.info
superEngine.info = "Hyper Engine2016"
superEngine.info
superEngine.name

superEngine.year

댓글 없음:

댓글 쓰기