페이지

2017년 8월 21일 월요일

Failable Init

class FailInit {

    var name : String?
    init?( name: String){
        if name.isEmpty {
            return nil  //available in failure init methods
        }
        self.name = name
    }

    func desc() {
        print("name is \(self.name!)")
    }

}



var f = FailInit(name:"kim")
f!.desc()
var m = FailInit(name:"")   //init failed
if m == nil {
    print("nil found")
}



/*
 name is kim
 nil found
 */

convenience vs designated init

Calling self init method can be available in convenience init method, not in designated init method
class Vehicle {
    var numberOfWheels = 0
    var name : String = ""
    init(numberOfWheels:Int){
        self.numberOfWheels = numberOfWheels
    }

    convenience init(name:String , wheels:Int){
        self.init(numberOfWheels: wheels)
        self.name = name
    }


    init(name:String , wheels:Int){        // ERROR : designated init can't call self init
        self.init(numberOfWheels: wheels)
        self.name = name
    }

    func desc() {
        print("\(name) has \(numberOfWheels)")
    }