본문 바로가기

전체 글24

Swift Optional unWrapping을 좀 더 간편하게 쓰는 법 옵셔널값을 언래핑해야 할 때나, closure안 캡처리스트 (ex: [weak self] in …) 약한 참조 접근을 많이 한다면 if let, guard let을 사용합니다. final class CapturedClass { private var afterExecutor: AfterExecutor private var optionalModel: OptionalModel? init(afterExecutor: AfterExecutor) { self.afterExecutor = afterExecutor } private func functionCall() { afterExecutor.after(time: 3) { [weak self] in self?.interalFunction() self?.interalF.. 2023. 4. 20.
Array에서 중복 제거하는 방법 Array에서 중복을 제거하는 방법은 새로운 배열을 만들고 넣을 때마다 Contain 되는지 체크 후 넣고 반환하는 방법이 있고, Set이라는 자료구조를 사용하여 처리하는 방법이 있습니다. 그 중 Set을 활용하여 중복을 제거해 보겠습니다. let duplicatedArray = [1, 2, 3, 4, 5, 5, 6, 2] // 예상 답: [1,2,3,4,5,6,2] let deduplicatedArray = Array(Set(duplicatedArray) // [2, 1, 3, 6, 4, 5] 10만 번의 요소가 있는 배열을 중복제거하고, set으로 바꾸면 순서가 보장되지 않으니, sorted로 원래 배열처럼 오름차순으로 바꿔주겠습니다. let array = (0.. 2023. 4. 19.
Array의 index를 안전하게 처리하는 방법 Sequence Protoocol을 따는 Collection Protocol은 Indexing에 관한 프로토콜입니다. Dictionary 또한 Collection protocol을 따르고 있습니다. 그렇기 때문에 Array에서 잘못 인덱스를 접근하는 것을 방지하기 위해서는 Collection Protocol로 접근하는 것이 좋습니다. extension Collection { subscript(safe index: Index) -> Element? { if self.indices.contains(index) { return self[index] } return nil } } indices라는 Collection프로토콜의 속성은 해당 컬렉션의 모든 인덱스를 Collection으로 반환합니다. 해당 index.. 2023. 4. 18.
KeyPath 오늘은 KeyPath라는 것을 알아보겠습니다. KeyPath는 사실 개발하면서 현재 많이 쓰지 않는 기능이긴 하지만 SwiftUI에서 간혹 보곤 합니다. LazyVGrid(columns: columns) { ForEach(images, id: \.self) { image in Image(uiImage: image) .resizable() .scaledToFit() .frame(height: 150) } } \.self 이게 바로 KeyPath입니다. 사용해 보신 적이 있으실 겁니다. 간단한 구조체 하나를 만들면서 설명 시작하겠습니다. struct Streamer { var name: String var subscriber: Int } let streamer = Streamer(name: "nogu", s.. 2023. 1. 16.