일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 제어문
- SWiFT
- class
- Gradle
- 전의 의존성
- 2차원 객체배열
- 클래스
- PHP
- 객체
- amazon
- 함수
- bootstrap
- DatePicker
- pagination
- programmers
- CKEditor4
- AWS
- Xcode
- switch-case
- 사용법
- jQuery
- EC2
- 옵셔널
- Spring
- CodeIgniter
- guard
- 자료불러오기
- Java
- 차이점
- 상속
Archives
- Today
- Total
not bad 한 개발
Swift - Failable Initializers(실패 가능한 생성자) 본문
(인덕대학교 컴퓨터소프트웨어학과 iOS프로그래밍기초(21-2학기)한성현 교수님 강의 내용을 변형 및 요약 했습니다.)
Failable Initializers(실패 가능한 생성자)
- Swift언어를 사용하여 iOS 앱을 만들경우 UIKit 안에 있는 함수 중에는 끝에 "!"가 붙어있는 함수가 있습니다.
- 조건에 맞는 파일이 없는 경우 인스턴스를 만들 수 없고 nil값도 저장할 수 있으려면 init다음에 "?"(언래핑)을 하여 옵셔널 값이 리턴되게 해야 합니다.
- init?로 만든 인스턴스는 옵셔널형으로 만들어져서, 사용하려면 옵셔널을 언래핑해야 해서 위 제일 마지막에 “!”가 있습니다.
(Failable Initializers 가 있는 인스턴스 생성 예제)
class woMan {
var age1 :Int
var weight2 :Double
func disPlay (){
print ("나이:\(age1), 무게:\(weight2)")
}
init?(myAge :Int , myWeight :Double ){
if myAge <=0 {
return nil
}
else {
self.age1 = myAge
}
self.weight2 = myWeight
}//failable initializer
}
var Lee : woMan = woMan (myAge :31 , myWeight :60.5 )!
//failable initializer을 호출하면 일반클래스의 자료형이 아닌 옵셔널타입으로 나옵니다.
//일반형으로 사용하고싶으면 강제언래핑을 하면 됩니다.
var Lee1 : woMan = woMan (myAge :0 , myWeight :50.5 )!
//조건에서 0이하이면 nil을 반환하게 했는데 강제로 언래핑하여 crash 되어
//다운이 된 것 입니다.
//그렇기에 바로 언래핑을 하는 것은 위험합니다.
Lee.disPlay ()
Lee1.disPlay ()
(Failable Initializers 올바르게 사용하는 방법)
class woMan {
var age1 :Int
var weight2 :Double
func disPlay (){
print ("나이:\(age1), 무게:\(weight2)")
}
init?(myAge :Int , myWeight :Double ){
if myAge <=0 {
return nil
}
else {
self.age1 = myAge
}
self.weight2 = myWeight
}//failable initializer
}
//1-1.옵셔널 형으로 선언
var Lee : woMan? = woMan (myAge :10 , myWeight :20.5 )
//1-2 옵셔널 바인딩
//nil값일 경우에도 조건문이 참이 아니기 때문에 crash가 나지 않습니다.
if let Lee1 = Lee {
Lee1.disPlay ()//나이:10, 무게:20.5
}
//2.인스턴스 생성과 동시에 옵셔널 바인딩
//nil값일 경우에도 조건문이 참이 아니기 때문에 crash가 나지 않습니다.
if let Lee2 = woMan (myAge :20 , myWeight :30.5 ){
Lee2.disPlay ()//나이:20, 무게:30.5
}
//3.인스턴스 생성하면서 바로 강제 언래핑
//nil값일 경우 crash가 일어나기 때문에 좋은방법은 아닙니다.
var Lee3 : woMan = woMan (myAge :30 , myWeight :40.5 )!
Lee3.disPlay ()//나이:30, 무게:40.5
//4.옵셔널 인스턴스를 사용시 강제 언래핑
//nil값일 경우 crash가 일어나기 때문에 좋은방법은 아닙니다.
var Lee4 : woMan? = woMan (myAge :40 , myWeight :50.5 )
Lee4 !.disPlay ()//나이:40, 무게:50.5
'Swift' 카테고리의 다른 글
Swift - overloading(생성자 중첩) (0) | 2021.11.03 |
---|---|
Swift - window VS Mac (0) | 2021.10.28 |
Swift - property(프로퍼티) (0) | 2021.10.23 |
Swift - self (0) | 2021.10.23 |
Swift - 인스턴스 초기화하기 (0) | 2021.10.23 |
Comments