Filtering Operatrosfilter어떤 값을 전달할 지 조건부로 결정하는 filter입니다.var subscriptions = Set()let numbers = (1...6).publishernumbers .filter { $0.isMultiple(of: 2) } .sink(receiveValue: { print($0) }) .store(in: &subscriptions)// *--- RESULT --*// 2// 4// 6 removeDuplicates동일한 값을 연속으로 내보내는 publisher를 무시합니다.let words = "hey hey there! want to listen to mister mister ? ? ?" .components(separatedBy..
Transforming Operatorspublisher로부터 오는 값에 대해 연산을 수행하는 메서드를 Operators라고 합니다.Cominbe operator들은 실제로 publisher를 반환합니다. 해당 publisher의 upstream 값을 수신하고 데이터를 조작한 다음 downstream으로 보냅니다.개념적으로 간소화하기 위해 연산자를 사용하고 오류를 처리하는 게 목적이 아니라면 오류를 downstream에 게시할 뿐입니다. collectpublisher의 개별 값 stream을 해당 값의 배열로 변환합니다. ["A", "B", "C", "D", "E"].publisher .sink(receiveCompletion: { print($0 }, receiveValue: { ..
Publishers & SubscribersCancellableSubscriber가 완료될 때, 더 이상 publisher로부터 값을 받지 않으려면 subscription을 취소하여 리소스를 확보하고 네트워크 호출과 같은 해당 활동이 발생하지 않도록 하는 것이 좋습니다. Subcription은 cancellation token으로 AnyCancellable 인스턴스를 반환하므로, 완료되면 취소할 수 있습니다. AnyCancellable은 Cancellable protocol을 준수하며, cancel()메서드는 정확히 그 목적을 위해 필요합니다. Subsciption에서 cancel()을 명시적으로 호출하지 않으면, publisher가 완료하거나 정상적인 메모리 관리로 인해 저장된 subscription..
What is Combine?이벤트 처리 연산자를 결합하여 비동기 이벤트 처리를 사용자 지정합니다. Combine 프레임워크는 앱이 이벤트를 처리하는 방식에 대한 선언적 접근 방식으로 제공합니다.Combine을 채택하면 이벤트 처리 코드를 일원화(centralizing)하고 중첩 클로저 및 convention을 기반하는 콜백과 같은 번거로운 기술을 제거하여 코드를 더 쉽게 읽고 유지 관리 할 수 있습니다. 여기서 말하는 일원화는 특정 이벤트 소스에 대해 단일 처리 체인으로 만드는 걸 의미합니다. 체인의 각 부분은 이전 단계에서 받은 요소에 대해 고유한 작업을 수행하는 결합 연산자입니다. Apple에서 비동기 프로그래밍을 개선하였고 몇 가지 메커니즘이 있습니다.NotificationCenter: 디바이..
객체 지향 프로그래밍: OOPObject-Oriented Programming(OOP) 객체 지향 프로그래밍은 디자인 철학입니다.객체는 객체의 속성에 대한 정보를 포함하는 데이터 구조입니다.객체는 현실 세계에서 나무가 될 수도 호수가 될 수도 있습니다. Beer 라는 class로 표현을 해보면 이니셜라이저로 인스턴스가 생성될 때 모든 프로퍼티가 올바르게 초기화되도록 합니다.class Beer { var volume: Double var canSize: Double var description: String init(volume: Double) { self.volume = volume self.canSize = 500 self.descriptio..
아이폰 기본 앱에 있는 공유 버튼은 위 사진과 같이 공유를 할 수 있게 됩니다. 그것을 사용하기 위해서는 UIActivityViewController를 띄우기만 하면 끝입니다. UIActivityViewController는 무엇일까? 항목 복사, 소셜 미디어 사이트에 콘텐츠 게시, 이메일 또는 SMS를 통한 항목 전송 등과 같은 몇 가지 표준 서비스를 제공하는데 사용하는 ViewController 라고 되어있습니다. 그리고 iPad에서는 popover에서 표현해야 하고 iPhone 및 iPod touch 에서는 모달로 표시해야 합니다. H.I.G 에서 말하는 Activity View는 무엇일까? 자주 사용하는 앱에 빠르게 액세스할 수 있을 뿐만 아니라 메시징과 같은 공유 활동과 복사 및 인쇄와 같은 작업..
반복문 Stride 지정된 값만큼의 시퀀스를 반환합니다. 이해를 쉽게 이야기하면 stride(from:to:by:) 는 from:이상 to:미만의 구간과 동일합니다. stride(from:through:by:) 는 from: 이상 through: 이하 구간과 동일합니다. stride(from: 0, to: 10, by: 2).forEach { print($0, terminator: ", ") } // 0, 2, 4, 6, 8 stride(from: 0, through: 10, by: 3).forEach { print($0, terminator: ", ") } // 0, 3, 6, 9 stride(from: 20, through: 10, by: -2).forEach { print($0, terminato..
우선 각 Image가 무엇을 나타내는지 보려고 합니다. UIImage 모든 이미지 형식에 대한 데이터를 나타내며 관리 가능합니다. immutable 특성으로 항상 이미지 데이터에서 이미지를 만들어야 합니다. 이미지 객체의 불변 특성은 모든 스레드에서 안전하게 만들고 사용할 수 있음을 의미 UIImageView에 있는 이미지를 업데이트하려면 새로운 UIImage를 만들어서 설정해야 한다. 따라서 이미지를 변경할 때에는 CGImage, CIImage 의 데이터를 가져와 변환하고 UIImage를 만들어야 합니다. 이미지 객체는 모든 플랫폼 네이티브 이미지 형식을 지원하지만 PNG 또는 JPEG 파일을 사용하는 것이 좋습니다. 두 가지 형식을 모두 읽고 표시하는 데 최적화되어 있으며, 다른 이미지 형식보다 더 ..