swift 55

property wrapper

특징 특정 값을 한 번 감싸서 저장을 위한 로직(setter)과 얻어오기 위한 로직(getter)을 어느 정도 분리해서 반복을 줄여주는 방법을 제공한다. 키워드는 지역 변수에만 사용이 가능하다. @UserDefault, @State, @Binding등 많이 있다. 아마 SwiftUI를 사용해 보았다면 한 번쯤은 보았을 것이다. 예제를 살펴보면 쉽게 이해할 수 있다. @propertyWrapper struct Money{ private var money: Int init() {self.money = 0} var wrappedValue: Int{ get {return self.money} set {self.money += newValue} } } struct Bank{ @Money var firstPeopl..

iOS/Swift 상식 2023.03.10

defer

defer는 되게 신기하게 동작하는 기능이다. 특징 현재 코드 블록을 빠져나가기 전에 실행해야 하는 코드를 작성할 수 있다. 함수에서 오류가 발생하여 코드가 블록을 빠져가게 되면 해당 함수가 할당한 메모리를 안전하게 해제할 수 있다. 실행되는 순서는 다음 두 가지 규칙을 따른다. 실행 규칙 defer가 중복될 때 역순으로 실행된다. 하나의 defer는 선언된 코드 블록을 빠져나가기 직전에 실행된다. 예시를 통해 알아보면 빠르게 이해할 수 있다. class A{ func test() { defer { print("test 1") } do { defer { print("test 2") } print("test 3") } for i in 0..

iOS/Swift 상식 2023.03.09

Extension 이란?

Extension은 새로운 함수적 기능을 class, struct, enum, protocol에 확장한다는 의미를 가진다. Extension으로 타입에 추가할 수 있는 기능 연산 타입 프로퍼티/ 연산 인스턴스 프로퍼티 타입 메서드/ 인스턴스 메서드 이니셜라이저 SubScripts 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 상속과 Extension의 차이점 상속 Extension 타입 클래스 타입만 가능 구조체, 클래스, 프로토콜 등에 적용 가능 특징 - 특정 타입을 물려받아 하나의 새로운 타입을 정의하고 추가 기능을 구현할 수 있음 - 수직 확장 - 기존 타입에 기능을 추가 가능 - 수평 확장 - 특정 타입을 준수하는 프로토콜 별 구현부를 분리하여 코드 가독성을 높일 수 있음 override..

iOS/Swift 상식 2023.03.08

Alamofire + RxSwift + MVVM

우선 RxSwift는 Return을 통해 데이터를 가지고 온다. Rxswift를 사용하기 전에는 Alamofire으로 통신하는 경우 @escaping을 통해 데이터를 viewModel로 가져온 뒤 같은 방법으로 View로 데이터를 전달하였다. 해당 방법을 사용하면 코드가 복잡해지고 직관적이지 못하다는 단점이 있다. (저는 그렇더라고요..ㅎ) 그래서! 우선 먼저 전체적인 흐름을 설명하자면 Alamofire post 통신을 한 후 Observable을 이용하여 ViewModel 데이터를 가져온다. 가져온 데이터를 다시 Alamofire get 통신을 한 후 Observable을 이용하여 ViewModel 데이터를 가져온다. ViewModel로 가져온 데이터를 Observable을 이용하여 View로 보낸다...

iOS/RxSwift 2023.03.05

Escaping 사용하기

Escaping의 특징을 잘 알지 못하는 분은 https://hj39-develop.tistory.com/143 Escaping 개념 Escaping은 탈출이라는 뜻으로 주로 Closure와 같이 사용한다. 탈출 클로저라고 부른다. Escaping 사용법 매개 변수 앞에 @Escaping 키워드를 사용한다. Escaping 종류 전달받은 클로저가 클로저 함수 외부로 hj39-develop.tistory.com 해당 블로그를 먼저 읽고 와주세요ㅎ escaping을 사용하기 앞서 클로저는 매개변수로 받아서 사용할 수 있다. (기억하기!) 아래 간단한 예시를 통해 매개변수로 받아온 클로저가 함수를 탈출하는 상황을 봐보자 func test(completion: () -> ()){ print("1") Dispat..

iOS/Swift 상식 2023.03.05

Escaping 개념

Escaping은 탈출이라는 뜻으로 주로 Closure와 같이 사용한다. 탈출 클로저라고 부른다. Escaping 사용법 매개 변수 앞에 @Escaping 키워드를 사용한다. Escaping 종류 전달받은 클로저가 클로저 함수 외부로 반환되는 경우 외부 글로벌 변수에 저장되는 경우 함수 내부에서만 유효한 것이 아닌 함수 외부에서도 유효하기 위해 사용된다. @escaping 키워드를 사용하지 않고 위와 같은 상황이 발생하는 경우 compile error가 발생한다. Escaping을 사용하는 이유 주로 네트워크 통신 통해 response 받은 이후 데이터를 비동기 처리하기 위해 사용한다. 자세하게 사용하는 방법은 다음 블로깅을 통해 공부할 예정이다. # 참고한 사이트 https://velog.io/@hay..

iOS/Swift 상식 2023.03.04

Hashable 및 Equatable을 상속 받아야 하는 이유

Hash란 어떤 특정 값(Key)을 해싱 함수에 넣었을 때 HashTable의 index로 변환한 후 HashTable에 Value를 저장하는 것을 말한다. Equatable과 마찬가지로 swift의 기본 자료형들은 Hashable 프로토콜이 자동 채택되어 따로 구현하지 않아도 사용할 수 있다. struct struct의 경우 내부 변수가 기본 자료형인 경우 따로 구현하지 않아도 사용 가능하다. struct Dog: Hashable{ let name: String = "a" let age: Int = 10 } let dog: [Dog:Int] = [:] class class의 경우 Hashable 내부 프로토콜과 Equatable 내부 프로토콜 함수까지 모두 구현해야 한다. 왜냐하면 Hashable 프로..

iOS/Swift 상식 2023.03.04

Equatable 이란?

Equatable는 예제를 통해 알아보면 쉽게 알 수 있다. Swift의 기본 자료형 Bool , Int , UInt , Float , Double , Character , String , Any 들을 비교할 때 '=='을 사용하여 비교한다. □ 자료형 Int를 비교하는 예시 let num1 = 1 let num2 = 3 num1 == num2 비교 연산자를 통해서 true, false를 얻을 수 있다. 하지만 구조체와 클래스를 비교하지 못한다.!! 왜냐하면 Swift의 기본 자료형들은 Equatable 프로토콜을 기본적으로 채택하지만 구조체와 클래스는 그러지 않기 때문! 구조체와 클래스에서 Equatable을 사용하기 위해서 프로토콜을 상속받으면 된다. struct Human : Equatable{ l..

iOS/Swift 상식 2023.03.03

POP(Protocol Oriented Programming) vs OOP(Object Oriented Programming)

POP와 OOP의 가장 큰 차이점은 클래스들이 수직적인 구성이나 수평적인 구성으로 이루어져 있다는 것이다. POP(Protocol Oriented Programming) POP는 필요한 부분만 프로토콜로 분리해서 만들 수 있고 다중 프로토콜을 구현할 수 있다. 프로토콜 규칙을 class, struct, enum에 적용할 수 있기 때문에 확장 부분에서도 OOP보다 유연하다. POP는 HAS-A 관계로 구성되어 있어 수평적인 구조로서 묘사할 수 있다. 예를 들어 강아지의 특성을 구현한다면 protocol Eatable{ func eat() } extension Eatable{ func eat(){ print("I can Eat") } } protocol EatAlot{ func eatAlot() } exte..

iOS/Swift 상식 2023.02.21

프로토콜이란?

프로토콜 정의 protocol은 Swift의 class나 struct의 함수를 정의하는 역할을 한다. swift에서 protocol은 타입으로 작용한다. 예를 들어서 알아보자 protocol은 Swift의 class나 struct의 함수를 정의하는 역할을 한다. protocol Animal{ func sleep() } class Dog: Animal{ func sleep(){ print("dog sleep") } } protocol에서 Animal의 행동을 정의만 해 놓는다. protocol 내부 함수를 사용하기 위해서는 class, struct를 생성한 후에 상속을 받아 사용해야 한다. swift에서 protocol은 타입으로 작용한다. protocol Animal{ func sleep() } clas..

iOS/Swift 상식 2023.02.21