본문 바로가기
2022_iOS 앱 개발자 워크숍/1, Swift 문법 복습

Swift : Failable initializer

by 황민우 2022. 1. 6.

실패 가능한 생성자

 - 값이 없어 오류를 방지하기 위해 nil 값으로 나타나게 하기위한 방법

 - !로 옵셔널을 반드시 풀어줘야함.

 

 

 

오류 코드

- 마지막에 넘어온 Int의 값이 그냥 정수가 아닌 옵셔널 값으로 넘어오기 때문에 오류가 발생한다. 

class Man{
    var age : Int
    var weight : Double
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init?(age: Int, weight: Double){
        if age <= 0 {
            return nil
        }
        else{
            self.age = age
        }
        self.weight = weight
    }
}
var Hwang : Man = Man(age:7, weight:16.3)
Hwang.display()
var Lee : Man = Man(age:0, weight:5)
Lee.display()

// 오류발생

예제 1 : 옵셔널 형으로 선언 후 옵셔널 바인딩

 - nil 값인 경우 거짓으로 넘어가 값이 안나옴.

class Man{
    var age : Int
    var weight : Double
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init?(age: Int, weight: Double){
        if age <= 0 {
            return nil
        }
        else{
            self.age = age
        }
        self.weight = weight
    }
}
var Hwang : Man? = Man(age:7, weight:16.3) 	// 옵셔널 형으로 선언
if let Hwang1 = Hwang{ 				//옵셔널 바인딩
    Hwang1.display()
}

실행결과
// 나이=7, 몸무게=16.3

 

예제 2 : 인스턴스 생성과 동시에 옵셔널 바인딩

 - nil 값인 경우 거짓으로 넘어가 값이 안나옴.

class Man{
    var age : Int
    var weight : Double
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init?(age: Int, weight: Double){
        if age <= 0 {
            return nil
        }
        else{
            self.age = age
        }
        self.weight = weight
    }
}
var Hwang : Man? = Man(age:7, weight:16.3) 
if let Hwang1 = Man(age:2, weight:4){
    Hwang1.display()
}

실행결과
// 나이=2, 몸무게=4.0

 

예제 3 : 강제 언래핑

 - nil 값인 경우 강제 언래핑으로 인해 크래쉬(오류) 발생

class Man{
    var age : Int
    var weight : Double
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init?(age: Int, weight: Double){
        if age <= 0 {
            return nil
        }
        else{
            self.age = age
        }
        self.weight = weight
    }
}
var Hwang : Man = Man(age:7, weight:16.3)!
Hwang.display()

실행결과
// 나이=7, 몸무게=16.3

 

예제 4 : 옵셔널 인스턴스를 사용 시 강제 언래핑 

 - nil 값인 경우 강제 언래핑으로 인해 크래쉬(오류) 발생

class Man{
    var age : Int
    var weight : Double
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init?(age: Int, weight: Double){
        if age <= 0 {
            return nil
        }
        else{
            self.age = age
        }
        self.weight = weight
    }
}
var Hwang : Man? = Man(age:7, weight:16.3)
Hwang!.display()

실행결과
// 나이=7, 몸무게=16.3

강의 출처 : https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

'2022_iOS 앱 개발자 워크숍 > 1, Swift 문법 복습' 카테고리의 다른 글

Swift : Super  (0) 2022.01.07
Swift : 상속  (0) 2022.01.07
Swift : 생성자 중첩  (0) 2022.01.06
Swift : Computed Property  (0) 2022.01.06
Swift : Self  (0) 2022.01.06

댓글