일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- instance
- property
- enum
- type
- url
- String
- Xcode
- optional
- Git
- initalizer
- init
- 디자인패턴
- struct
- 스위프트
- extension
- IOS
- Protocol
- tuist
- 이니셜라이저
- 코딩테스트
- interpace
- Terminal
- delegate
- UIKit
- Swift
- initializer
- Class
- Unicode
- Method
- Foundation
- Today
- Total
목록Method (10)
아리의 iOS 탐구생활
Apple Developer Documentation developer.apple.com 새로운 ViewController 클래스를 만들게 되면 아래 prepare 메소드가 주석처리 되어있다. /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new..
Protocol Extension extension은 타입을 확장한다. 프로토콜 역시 타입이기 때문에 extension을 활용하여 확장할 수 있다. 프로토콜에는 정의만 한다고 하였는데 extension을 통해 구현을 추가한다는 것이 조금 어색할 수도 있다. 정리하자면 문법적으로는 프로토콜의 구현을 추가하지만 실제로는 프로토콜을 채용한 타입의 구현이 추가된다고 보면 된다. 코드의 중복을 줄이면서 프로토콜을 확장시킬 수 있다는 장점이 있다. 예제를 통해 이해해보자. protocol SayText { var text: String { get set } func say() } extension SayText { func say() { print(text) } } struct A: SayText { var tex..
Protocol Types 프로토콜은 first-class Citizen이다. 즉 독립적인 타입이다. 변수나 상수를 사용할때 자료형으로 사용하거나 파라미터의 자료형으로 사용할 수 있다. 반환타입으로 선언하는 것도 가능하다. protocol TypeA { func say() } class A: TypeA { let text: String = "난 A야!" func say() { print(text) } } let a = A() let t: TypeA = A() // 타입을 프로토콜로 선언하여도 에러가 없다. 확인해보면 프로토콜 타입으로 클래스 인스턴스를 생성하여도 에러가 없다. 왜냐하면 클래스 A는 프로토콜 TypeA를 채택하고 있기 때문이다. 이것은 슈퍼클래스 타입을 저장하는 업캐스팅과 유사하다. 업캐스..
Initializer Requirements 🔍 구조체와 클래스에서 생성자 구현의 차이 구조체는 Memberwise Initializers를 통해 프로토콜 요구사항을 충족시킬 수 있다. 직접 이니셜라이저를 구현해줘도 상관없다. 클래스는 상속을 고려해야하고 모든 서브클래스에서 프로토콜의 요구사항을 충족시켜야 한다. 그래서 클래스에서는 required initializer로 선언해야 한다. protocol Test { var name: String { get } init(name: String) } //struct A: Test { // var name: String // Memberwise Initializers를 통해 프로토콜 요구를 충족시킨다. //} struct A: Test { var name: S..
Method Requirements 👉🏻 프로토콜에서의 메소드 정의하기 protocol Protocols { func A(param: Int) -> Int static func B(param: String) -> String mutating func C(param: Double) -> Double // 값타입 전용은 아니다. 참조타입에서도 채택가능하다. } 프로토콜은 메서드 이름, 파라미터 이름과 타입, 리턴 타입만 정의한다. 채택하여 메서드를 구현할때 구현부는 자유롭게 작성할 수 있다. protocol Talk { func say() } class A: Talk { func say() { print("난 클래스 A라고 해.") } } 만약 구조체안에 메서드가 프로퍼티의 값을 바꾸려한다면 mutating..
Property Requirments 프로토콜에서는 프로퍼티가 저장프로퍼티인지 연산프로퍼티인지 명시하지 않고, 이름과 타입 그리고 gettable, settable한지 명시한다. 프로퍼티는 항상 var로 선언해야 한다. 프로토콜에서의 var 키워드는 가변성과는 아무런 관계가 없다. 대신 선언하는 멤버가 프로퍼티라는 것을 나타낸다. protocol Protocols { var name: String { get set } static var age: Int { get set } } get과 set이 모두 포함되어있다면 형식에서 읽기와 쓰기가 가능한 프로퍼티로 구현해야하고, get만 포함되어있는 경우에는 읽기 가능하도록 구현하면 된다. 타입 프로퍼티로 선언할때는 var 키워드 앞에 static을 추가해주면 된..
프로토콜(Protocol)은 최소한으로 가져야할 속성이나 메서드를 정의해줄 수 있다. 구현은 하지않고 정의만 하는게 특징이다. 프로토콜을 적용하면 프로토콜에서 정의한 속성과 메서드를 모두 구현해야 한다. 하나의 타입으로 사용되기 때문에 아래와 같이 타입 사용이 허용되는 모든 곳에 프로토콜을 사용할 수 있다. 함수, 메소드, 이니셜라이저의 파라미터 타입 혹은 리턴 타입 상수, 변수, 프로퍼티의 타입 배열, 딕셔너리의 원소타입 🔍 기본형태 protocol name { // 프로토콜 정의 } 구조체, 클래스, 열거형 등에서 프로토콜을 채택하려면 타입 이름 뒤에 콜론”:”을 붙여준 후 채택할 프로토콜 이름을 쉼표”,”로 구분하여 명시해준다. SubClass의 경우 SuperClass를 가장 앞에 명시한다. st..
✔️ Class’s initalizer 🔍 Designated initalizer (지정 초기화) 흔히 보는 기본적인 initalizer이다. 부모 Class의 initalizer를 호출할 수 있다. class 내부에는 반드시 한 개 이상의 Designated initalizer가 있어야 한다. init(매개 변수) { /* 구현부 */ } 🔍 Convenience initalizer (편의 초기화) Designated initalizer의 일부 매개변수의 기본값을 설정하여 초기화하는 initalizer이다. 쉽게 말하면 기존 Designated initalizer에 default를 주고 싶은 경우에 사용한다. 더 적은 입력으로 초기화를 편리하게 할 수 있게 도와주는 역할을 한다. convenience ..
✔️ Struct’s initalizer 종류 🔍 Memberwise initalizer 구조체 내에 프로퍼티가 하나라도 초기화 되지 않은 경우, 초기값이 없는 속성을 매개변수로 갖는 Memberwise initalizer가 제공된다. 속성이 모두 let으로 값까지 모두 초기화 되어있는 경우에는 Memberwise initalizer는 제공되지 않는다. 🔍 기본 initalizer 프로퍼티가 모두 초기화 되어있는 경우 매개변수가 없는 initalizer가 제공된다. struct Sample { let own: Int let two: String let three: Bool } let test1 = Sample(own: 1, two: "문자열", three: true) // Memberwise inital..
이니셜라이저(initalizer)란? 쉽게 예를 들어본다면 아이폰에서 공장초기화를 하는 것을 생각해보면 된다. 초기에 상품이 나올때의 상태로 세팅하는 것과 같다고 볼 수 있다. class, struct, enum 등의 Instance를 생성할 때 필요한 값들을 넣어주는 준비 작업이다. Property의 초기값을 설정한다. 초기화 작업이 완료되면 메모리에 Instance가 생성 된다. 가장 기본적인 형태는 매개변수가 없는 형태이다. init() { // 이 곳에서 초기화를 구현 } struct Say { var text = "말" init() { print(text) } } let test = Say() // 출력: 말 🔍 기본값을 지정하여 초기화 초기화할때 프로퍼티의 선언과 동시에 값을 할당하면 그 값을..