실패 가능한 생성자
- 값이 없어 오류를 방지하기 위해 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 |
댓글