본문 바로가기

728x90

난 iOS개발자

(53)
Combine 변환연산자 Combine에서 우리는 퍼블리셔로부터 오는 값에 대한 연산을 수행하는 메소드를 " `operator` "라고 부릅니다. 각 결합 연산자는 게시자를 반환합니다. 일반적으로 게시자는 업스트림 이벤트를 수신하여 조작한 다음 조작된 이벤트 다운스트림을 소비자에게 보냅니다. collect() collect연산자의 publisher는 개별 값 스트림을 단일 배열로 변환하는 편리한 방법을 제공한다. 마블 다이어그램은 작업자가 작동하는 방식을 시각화하는 데 도움이 된다. 맨 윗줄은 업스트림 게시자, 상자는 연산자를 나타낸다. 그리고 마지막은 구독, 구체적으로는 업스트림 게시자로부터 오는 값을 조작한 후 구독자가 받게된다. example(of: "collect") { ["A", "B", "C", "D", "E"].pu..
[SwiftUI] View와 ViewModel (ObservableObject, @Published, @ObservedObject) @State에 이은 두번째. ObservableObject와 @ObservedObject는 SwiftUI에서 ViewModel구조를 사용할때 유용하다. ObservableObject를 채택하면 클래스의 내부속성의 변경사항을 구독자에게 전달할수 있는 객체가 된다. 오로지 클래스에만 사용이 가능하다. class SomeViewModel: ObservableObject { @Published var myName: String = "" } 그리고 뷰 모델에서 변경 가능한 속성을 선언하기 위해 @Published 속성 래퍼를 사용해야 한다. @Published는 ObservableObject 프로토콜을 준수하는 클래스에 속성을 감시할수 있도록 하는 프로퍼티 래퍼다. SwiftUI를 사용한 MVVM구조에서 View..
[SwiftUI] @State @State는 가변 데이터를 나타내는 속성 래퍼이다. @State를 변수 앞에 배치하면 SwiftUI는 해당 속성을 추적하고 , 상태가 변경될 때 마다 새로운 작업(뷰를 다시 그리는)을 할 수 있다. 이를 통해 뷰는 사용자 상호작용으로 데이터 모델의 변경에 즉각적인 UI업데이트 흐름을 만들 수 있다. @State var userTouchCount: Int @State 속성 래퍼가 사용되는 뷰에서 값을 변경하려면, 해당 뷰 내부에서만 변경해야 한다. 예를 들어 버튼이나 텍스트 필드를 통해 값을 변경하는 그런것이다. 일반적으로 아래와 같이 사용한다. struct ContentView: View { @State var myName: String = "" var body: some View { VStack() ..
Combine01 개요 Combine 프레임워크는 지정된 이벤트 소스에 대해 단일 처리 체인을 만들 수 있다. 체인의 각 부분은 이전 단계에서 받은 요소에 대해 고유한 작업을 수행하는 결합 연산자이다. 비동기 프로그래밍 begin var name = "Tom" print(name) name += " Harding" print(name) end -> 단일 스레드에서 실행되므로 결과가 항상 같음 --- Thread 1 --- begin var name = "Tom" print(name) --- Thread 2 --- name = "Billy Bob" --- Thread 1 --- name += " Harding" print(name) end -> 어떤 스레드가 먼저 실행될지 모르며 결과가 매번 달라질 수 있다. 애플의 비동기 프로..
Build/Archive 시 Codesign [키체인 접근/Framework] 엊그제 앱스토어 업로드를 위해 아카이빙을 하는데 framework에 대한 서명이 필요하다며 팝업이 발생했다. 보통 여기에 항상 허용이 있는데, 왜 안보이는지 잘 모르겠다. 어쨌거나, 항상허용 버튼이 없어서 급한대로 사용자 이름과 암호를 프레임워크의 수만큼(무려 수십개!!) 넣어주는 개고생을 했는데, 어찌저찌 검색을 통해 문제를 해결하긴 했다. https://developer.apple.com/forums/thread/92336
[RxSwift] Observable 객체에 이벤트/값 등을 추가 - 방출(emit) 가능 Observable을 구독(subscribe)하는 대상에게 이벤트를 방출한다. Observable은 Sequence와 같다. Observable Event의 3종류 Next: 구독자에게 이벤트를 전달 Completion: 구독자에게 완료를 알리고 Stream이 종료된다. Error: 구독자에게 에러를 알리고 Stream이 종료된다. Observable의 생성 Observable.create ( { observer -> Disposable in observer.onNext("1") observer.complete() observer.onNext("2") return Disposable.create() }).disposed(by: disposebag) /..
AppStore 화면 만들어보기 이러한 화면은 너무나 익숙할 것이다. 근데 이런화면 어떻게 만들지..? 다양한 방법이 떠오를 수 있다. 이번에는 ScrollView와 StackView 그리고 CollectionView의 조합으로 위와 같은 화면을 구성해 보고자 한다. 일단 필요한 라이브러리가 있다. 굳이 사용하지 않아도 되지만 편하게 UI구성을 하고 싶다면 SanpKit을 넣어주자. 방법은 아래 링크 참고 2021.10.29 - [앱 개발 도움 링크/Libraries(Github...)] - [iOS] SnapKit 사용법 [iOS] SnapKit 사용법 🤔왜 이걸 쓰지? 개발 시 스토리보드를 사용하여 화면의 UI를 구성할 수도 있지만 Autolayout을 코드로 작성하는 방법도 있다. NSLayoutConstraint를 직접 지정해주..
HomeBrew설치 그리고 실패 HomeBrew? macOS용 패키지 관리자임. 설치만 하면 간단한 리눅스 명령어를 통해 애플리케이션을 설치 할 수있다. Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 설치하기 명령어의 오른쪽 복사하기 버튼을 눌러서 복사하고 Terminal에서 붙여넣기 Enter! 맥 비밀번호를 입력하라고 나오면 입력하고 엔터, 엔터! 다 되었으면 terminal에서 brew버전을 확인해보자. brew --version Warning: /opt/homebrew/bin is not in your PATH. Instructions on how to configure your shell for Homebrew can be found in the 'Nex..
COW(Copy On Write) 원본 또는 복사본이 수정되기 전까지 복사를 하지 않고 원본 리소스를 공유하는것. 수정이 일어날 경우, 그때 복사하는 작업을 함 Swift에서는 CollectionType을 복사해서 사용할 때 발생한다. : Array/ Dictionary/ Set 아래 코드를 보자 var array1 [Int] = [1, 2, 3, 4] var array2 = array1 Array는 구조체이다. array2는 array1을 할당했으니 array1의 값이 array2에서 복사되어야하는데. 그렇다면 array1과 array2는 서로 다른 주소를 갖고 있어야하는것이 맞다. 그러나 cow는 바로 복사하지 않는다. array2에서 수정이 발생하지 않은 경우 array2도 array1의 주소를 참조하고 있는 형태가 된다. 또는 원..
Global DispatchQueue의 QoSClass GCD는 동시 작업을 관리하기 위한 저수준 API다. 계산 비용이 많이 드는 작업을 백그라운드에서 실행시키고 앱의 응답성을 개선하는데 도움이 된다. GCD는 내부적으로 공유 스레드풀을 관리한다. GCD를 사용하면 코드블럭이나 Task 항목을 디스패치 큐에 추가하고 GCD는 이를 실행할 스레드를 결정한다. GCD는 시스템 및 사용 가능한 시스템 리소스에 따라 필요한 병렬 처리량을 결정한다. 대기열 이해 GCD는 디스패치큐 에서 작동한다. 이 대기열은 작업단위를 제출하면 FIFO 순서로 실행한다. 디스패치큐는 스레드로부터 안전하므로 여러 스레드에서 동시에 액세스할 수 있다. 대기열(큐)은 직렬과 동시가 있다. 직렬큐는 주어진 시간에 하나의 작업만 실행되도록 보장하며, 한 작업이 끝나고 다음 작업이 시작되기까..

728x90