일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Protocol
- ribs
- combine
- UITextView
- 리펙터링
- Observable
- rxswift
- 클린 코드
- Refactoring
- MVVM
- 스위프트
- RxCocoa
- UICollectionView
- ios
- collectionview
- uitableview
- Clean Code
- 애니메이션
- swiftUI
- Human interface guide
- swift documentation
- map
- HIG
- tableView
- 리팩토링
- clean architecture
- Xcode
- 리펙토링
- uiscrollview
- SWIFT
- Today
- Total
목록swift 5 문법 (23)
김종권의 iOS 앱 개발 알아가기
Async, Await 이란? 기존에 비동기 처리 방식은 DispatchQueue나 completionHandler를 사용하여 처리했지만, 더욱 편하게 비동기 처리할 수 있는 문법 // DispatchQueue 사용한 비동기 처리 DispatchQueue.global.async { } // completionHandler를 사용한 비동기 처리 let task = URLSession.shared.dataTask(with: url, completionHandler: { data, response, error in }).resume() 비동기 처리란 위와 같이 오래걸리는 작업이 있을 때, 그 작업이 끝나는 것을 기다리지 않고 수행하도록 일을 처리하는 것 이 밖에도 대표적인 비동기 처리 방법에는 RxSwift와..
예약어란? 특정 기능을 미리 예약되어 있는 단어 switch문에서 case에 class, var, let을 그냥 사용하면 예약어로 인식하기 때문에 컴파일 에러 발생 Backtic Backtic 기호인 ``를 사용하여 예약어를 사용 enum Sample { case `class` case `var` case `let` }
Stored Property 정의: class, struct에서 instantce의 일부로 저장되는 상수(let) 또는 변수(var) default 값 또는 init을 사용하여 값 할당 lazy property: 해당 property가 사용될 때 초기화 let으로 선언 불가: let은 초기화가 완료 되기 전에 항상 값을 가져야 하므로 property의 초기 값이 인스턴스의 초기화가 오나료 될 때까지 알 수 없는 외부 요인에 의존할 때 사용 property의 초기 값에 복잡하거나 계산 비용이 많이 드는 설정이 필요할 때 or 필요할 때까지 수행해서는 안되는 경우에 사용 lazy 주의 사항: lazy property는 여러 스레드에서 동시에 접근되고, 아직 초기화 되지 않은 경우 한 번만 초기화 된다는 보장..
Designated init (지정 초기화) 역할: 해당 클래스에 의해 선언된 모든 property를 모두 초기화하고 적절한 super class의 init을 호출하여 super class까지 init 프로세스를 진행 Designated init은 그냥 "Designated"를 생략하여 그냥 init으로 사용 Convenience init (편의 초기화) Designated init의 parameter중 일부를 기본값으로 설정하여 동일한 클래스에서 지정된 initializer를 호출하도록 정의 예시 designated init class Person { let name: String let age: Int let birthDay: String init(name: String, age: Int, birth..
struct와 class 중에서 어떤 것을 사용할지 정하는 기준 상속이 필요하지 않고 모델이 크지 않으면 struct 사용 json파싱할 경우 struct사용 serialize해서 전송하거나 파일로 저장할 일이 있다면 class사용 Obj-C에서도 사용하려면 class사용 * serialize: 객체를 직렬화 하여, 전송 가능한 파일 형태로 만드는 것 struct call-by-value: closure에 의해 capture되는 경우도, reference copy stack memory할당(빠른 속도) scope base lifetime: 컴파일 타임에 complier가 언제 메모리를 할당/해제할지 알고 있음 data locality: 캐시 히트율이 높음 Codable 프로토콜을 통해 JSON ..
Default Initialize (기본 이니셜라이저) 클래스에서 이니셜라이저를 정의하지 않은 경우 Designated Initializers and Convenience Initializers Designated Init(지정초기화): 클래스의 모든 프로퍼티를 초기화 Convenience Init: 미리 지정된 값을 사용해서 최소한의 입력으로 초기화 할 수 이도록 해주는 초기자 Designated는 반드시 위임을 superclass로 해야하고, convenience는 같은 레벨에서 해야함 클래스 타입은 반드시 한 개 이상의 Designated Initialize가 있어야 함 Designated Initilize는 반드시 직계 superclass의 지정 init을 호출해야함 Convenience Init..
1. precedencegroup 설정 precedencegroup ForwardApplication { associativity: left // 왼쪽 연관성: 왼쪽에서 오른쪽으로 연산되게끔 // lowerThan: AdditionPrecedence // 의미: 덧셈을 먼저 처리 // higherThan: CastingPrecedence } infix operator |>: ForwardApplication public func |> (x: A, f: (A) -> B) -> B { return f(x) } precedencegroup 스위프트는 그룹을 설정하여 우선순위를 정하기 때문에, 새로운 연산자에 대한 우선순위를 결정하기 위해 precedencegroup을 설정해야 함 infix infix: 1+1..
1. 고차함수(Higher-order function)란? 하나 이상의 함수를 인자로 취하거나 함수를 반환하는 함수를 의미 - higher order function: 함수 내부에서 일어나는 특성 (함수를 인수로 받는 것, 함수를 리턴하는 것) - first class: 함수 외부에서 일어나는 특성 (함수를 변수에 대입 가능한 것) ex) 배열에서 각 원소들을 접근하여 새로운 값을 생성하거나(map), 조건을 정하여 그 조건에 맞는 원소만 접근하거나(filter), 배열을 하나의 값으로 표현하거나(reduce) 2. swift의 대표적인 고차함수 1) Map 콜렉션 내부의 기존 데이터를 변형(transform)하여 새로운 콜렉션 생성 * 아래 예제를 map을 이용해서 for문 없이 표현하면? let ar..