안녕하세요 Hani입니다. 코드로 뷰를 작성할 때 translatesAutoresizingMaskIntoConstraints = false를 까먹는 경우가 많아서 😅 @propertyWrapper struct UseAutoLayout { var wrappedValue: T { didSet { useAutoLayout() } } init(wrappedValue: T) { self.wrappedValue = wrappedValue useAutoLayout() } private func useAutoLayout() { wrappedValue.translatesAutoresizingMaskIntoConstraints = false } } @UseAutoLayout private var label = UILabe..
안녕하세요 Hani입니다. BaseViewController를 어떻게 만들까 고민한 결과를 적어볼까 해요. ☺️ class ViewController: UIViewController { let viewModel: T private var cancellables = Set() init(viewModel: T) { self.viewModel = viewModel super.init(nibName: nil, bundle: nil) } init?(coder: NSCoder, viewModel: T) { self.viewModel = viewModel super.init(coder: coder) } @available(*, unavailable) required init?(coder: NSCoder) { fata..
안녕하세요 Hani입니다. 이번에는 map, compactMap, flatMap의 차이에 대하여 알아볼 거예요. ☺️ map map은 sequence의 모든 원소에 대한 변환 작업을 통해 새로운 Array을 만들어줍니다. let cast = ["Vivien", "Marlon", "Kim", "Karl"] let lowercaseNames = cast.map { $0.lowercased() } // 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"] let letterCounts = cast.map { $0.count } // 'letterCounts' == [6, 6, 3, 4] compactMap compactMap은 sequence의 모든 원소에 대한 ..
안녕하세요 Hani입니다. ☺️ 이번에는 allCases와 AllCases의 차이에 대하여 알아보겠습니다. 저는 CaseIterable 프로토콜은 보통 타입 안에 있는 case들에 접근하기 위해 사용해왔어요.🥺 allCases만 썼는데 AllCases도 궁금해져서 프로토콜을 뜯어보려고 합니다. AllCases는 associatedtype키워드 덕분에 특정 타입으로 제한되어 있지 않습니다. 또한, AllCases는 Collection 프로토콜을 순응하는 타입만 받고 있네요. 간단히 말하면 Collection 프로토콜을 채택한 타입은 배열처럼 쓸 수 있습니다. 따라서 AllCases는 채택한 곳의 모든 case들을 element로 가질 수 있는 배열같은 타입이라고 할 수 있어요. AllCases는 모든 ca..
안녕하세요 Hani입니다. 이번에는 Collection 프로토콜에 대하여 알아볼 거예요. 🥰 먼저, Collection을 알기 위해 먼저 조사해야 할 것들이 있습니다. IteratorProtocol 프로토콜부터 보시져 🧐 public protocol IteratorProtocol { associatedtype Element public mutating func next() -> Self.Element? } IteratorProtocol 프로토콜을 채택한 타입은 구현한 next메서드를 통해 순차적으로 순회하는 Iterator가 됩니다. 뭐를 순회 하냐면.. public protocol Sequence { associatedtype Element where Self.Element == Self.Iterato..
안녕하세요 Hani입니다. 이번엔 lazy 키워드에 대하여 알아볼 거예요. 🥰 lazy는 무엇인고 lazy는 인스턴스를 생성하는 시점에 값을 부여하고 싶지 않은 변수에 대하여 붙여주는 키워드입니다. lazy라는 키워드가 붙으면 초기 값을 주지 않고, 첫 번째 호출 때 초기화를 해주겠다는 의미이기 때문에 변수만 가능해요. let으로 선언하면 나중에 값을 바꾸지 못하니까용. Q. 그럼 연산 프로퍼티 쓰면 되자나? 😡 연산 프로퍼티와 lazy로 선언된 프로퍼티(=지연 저장 프로퍼티)의 차이를 한 번 볼게요. 연산 프로퍼티는 호출될 때마다 새롭게 바뀐 값에 대하여 연산을 수행해주고 있습니다. 그러나 지연 저장 프로퍼티 첫 번째 호출 시점에 초기화가 된 이후, 다음부터는 새 값으로 갱신되지 않고 있어요. 지연 저..
- Total
- Today
- Yesterday
- WWDC16
- 다익스트라 시간복잡도
- 최대 매칭
- mach-o
- 에드몬드 카프 알고리즘
- 부스트캠프 6기
- rxswift
- 최단경로문제
- State Restoration
- CPU와 Memory
- 포드 풀커슨 알고리즘
- 최단경로 알고리즘
- 네트워크 유량
- 강한 순환 참조
- IOS
- 벨만포드 시간복잡도
- 최단경로 문제
- test coverage
- MeTal
- WWDC21
- 코딩대회
- WWDC17
- 네트워크 플로우
- HIG
- CompositionalLayout
- observeOn
- WWDC19
- 벨만포드 알고리즘
- 컴퓨터 추상화
- Testable
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |