Combine Operators
실무에서 숨 쉬듯이 쓰는 Combine 오퍼레이터 Combine에는 수백 개의 오퍼레이터가 있지만, 실제 iOS 현업에서 매일같이 쓰는 핵심 오퍼레이터는 정해져 있다. 개념만 나열하기보다는 “실무에서 이 오퍼레이터를 왜 써야만 하는가?”에 초점을 맞춰 카테고리별로 정리해 본다. 💡 참고: sink와 assign은 오퍼레이터인가? 엄밀히 말해 ...
실무에서 숨 쉬듯이 쓰는 Combine 오퍼레이터 Combine에는 수백 개의 오퍼레이터가 있지만, 실제 iOS 현업에서 매일같이 쓰는 핵심 오퍼레이터는 정해져 있다. 개념만 나열하기보다는 “실무에서 이 오퍼레이터를 왜 써야만 하는가?”에 초점을 맞춰 카테고리별로 정리해 본다. 💡 참고: sink와 assign은 오퍼레이터인가? 엄밀히 말해 ...
MMAInfoCurrentValueApp (PassthroughSubject) 이번엔 PassthroughSubject를 사용한 앱을 만든다. Modeling struct MMAFighter: Codable, Identifiable { var id = UUID() let name:String let fightTeam...
Data Streaming: PassthroughSubject의 도입 지금까지 만든 방식은 진정한 의미의 데이터 스트리밍(Data Streaming)이 아니다. API를 한 번 호출하고 결과를 통째로 한 번 받고 끝나는 단발성 작업(Future)이었을 뿐이다. 하지만 이번 프로젝트에서는 PassthroughSubject를 도입한다. 무엇이 다른...
진짜 Fighter Service 만들기 이전글에서 Future에 너무 매몰이 되어서 글이 너무 길어지는 바람에 새로 적고 제대로 시작해본다. 진짜 fetchAllFightersData 만들기 private func fetchAllFightersData() -> AnyPublisher<Data, Error> { Futu...
MMA Information App 만들어보기 UI는 크게 중요하지 않아서 대충 만든다. Using Combine for Your App’s Asynchronous Code Docs 이거 한번 읽어보면 좋다. Modeling MMAFighters.json 파일을 보면 { "name": "Jon Jones", "fightTeam...
이전에 정리를 한적이 있긴한데, 강의에 적힌걸 번역해서 여기에 적어본다. 내용이 꽤나 많을지도? Combine이란? Combine은 비동기 값을 데이터 스트림으로 처리하는 Apple의 프레임워크다. 4가지 핵심 구성요소가 있다. Publisher – 시간이 지남에 따라 값을 생산하는 소스 (네트워크 요청, 타이머, Subject 등) ...
iOS 26 Update 일단 이건 강의가 있는게 아니라 완성된 코드만 있어서 코드를 비교해보고 바뀐점에 대해 적어보려고한다. 우선 버전을 26으로 바꾸니 Deprecated 관련 Warning이 많이 보인다. 천천히 해결해보도록 한다. DDGLocation, Hashable 삭제 ProfileView UI 일부 수정 // before ...
iOS 17 Update 이전에 다룬글이 너무 길어서 여기는 새롭게 작성 PhotoPicker 이전에 우리는 PhotoPicker라는 structure를 만들고 그걸 사용해서 Photo picker를 사용했다. 이제 이걸 SwiftUI가 새롭게 지원하는 PhotosPicker를 사용해 만들어본다. 사실 이것도 이전에 한번 해본적이 있긴하다. (확...
iOS 17 Update Resource 기존에 Image를 Asset에 넣을경우 아래와 같이 String으로 입력했어야 했다. 이때 오타가 발생하면 해당 이미지를 사용못하는 큰 단점이 존재했다. // Constants // Before enum PlaceholderImage { static let avatar = UIImage(named...
iOS 16 Update 15에 이어 16도 적용해보도록 한다. Warning 해결하기 이렇게 Warning이 발생하는데 Main actor-isolated instance method 'locationManager(_:didUpdateLocations:)' cannot satisfy nonisolated requirement didUpda...