티스토리 뷰
swift에는 그냥 init ( Designated init )과 convenience init 이렇게 두가지가 존재합니다.
이 두가지의 차이점에 대해서 알아보려고 합니다.
일단 그냥 init은 말그대로 생성자입니다.
그래서 이 생성자에서는 클래스의 모든 property가 초기화 될 수 있도록 하여야 합니다.
1 2 3 4 5 6 7 8 9 10 11 | class Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } } | cs |
이렇게 객체를 생성한다고 할 경우에, 모든 property가 init을 할 경우에 초기화가 되어 있습니다.
하나라도 빠지게 되면 초기화가 되지 않겠죠?
그렇게 되면 에러가 발생하게 되고 초기화를 하라고 합니다.
Return from initializer without initializing all stored properties
그럼 기본 init 말고 convenience init은 이렇게 다 하지 않아도 됩니다.
대신... 기본 init에 위임을 하여 주면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } convenience init(name: String) { self.init(name: name, age: 0) } } | cs |
이렇게 되면 init을 아예 다른것으로 만들면서 기본 생성자를 호출만 하여 주면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } convenience init(first: String, name: String, age: Int) { self.init(name: "\(first) \(name)", age: age) } } | cs |
이런저런것들 extension 만들때 저는 많이 이용합니다.
'Mobile > iOS' 카테고리의 다른 글
iOS/swift. hitTest 이용하기 (0) | 2018.04.08 |
---|---|
swift의 subscript (0) | 2018.04.04 |
WKWebView와 UIWebView의 차이점 비교 (0) | 2018.04.04 |
WKWebView를 사용할 경우에 외부 앱을 호출할때 handler 처리 (0) | 2018.04.01 |
RxSwift의 Reactive방식으로 delegate를 만들기 (aka. WKWebView+Rx) (0) | 2018.04.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- ubuntu
- git
- tomcat
- go
- Python
- MySQL
- Xcode
- Kotlin
- Java
- centos8
- Linux
- CentOS
- android
- Codable
- github
- cocoapods
- SWIFT
- intellij
- golang
- Windows
- Spring
- Gradle
- docker
- ios
- php
- war
- rxswift
- windows10
- enum
- nodejs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함