본문 바로가기

iOS113

#12 Key-Value Observing [출처:www.raywenderlich.com/books/combine-asynchronous-programming-with-swift/v2.0] 변화를 다루는 것은 Combine 의 핵심기능 입니다. subscriber를 통해 Publisher 를 구독(subscribe) 하여 비동기적 event 를 처리할 수 있게 해줍니다. 이전 챕터에서 assign(to:on) 을 배웠습니다. assign()은 주어진 객체에 대한 프로퍼티의 값(value)을 publisher가 매번 새로운 값을 emit 할 때 update 시켜줄 수 있습니다. 하지만 단 하나의 변수에 대해 변화를 관찰하려는 경우는 어떨까요? Combine 은 이런 경우에 있어 몇가지 옵션을 제공합니다. KVO-compliant를 만족하는 모든(A.. 2020. 10. 30.
#9 Networking [출처:www.raywenderlich.com/books/combine-asynchronous-programming-with-swift/v2.0]프로그래머로써 networking 작업을 많이 하게됩니다.backend 와 통신fetching datapushing updatesencoding and decoding JSONcombine은 이런 흔한 작업들을 declaratively 하게 수행할 수 있는 API 를 제공합니다.이런 API 들은 현대 앱의 2가지 부분에 도움을 줍니다.URLSessionJSON encoding and decoding through the Codable protocolURLSession extensionsURLSession은 network data 전송 작업에 권장되는 방법입니다... 2020. 10. 28.
"UI events are asynchronous" 글의 흐름 UI event async? -> async vs sync -> concurrency vs parallelism -> 멀티코어 vs 싱글코어 -> 멀티,싱글 쓰레드 Combine 을 공부하던 중 이런 문장이 있었다. Since most typical code performs some work asynchronously, and all UI events are inherently asynchronous, its impossible to make assumptions about which order the entirety of your app code will executed. 대부분의 일반적인 코드는 일부 작업을 비동기식으로 수행하고 모든 UI 이벤트는 기본적으로 비동기식이므로 앱 코드 전체가 .. 2020. 10. 28.
#3 Transforming Operators [출처:www.raywenderlich.com/books/combine-asynchronous-programming-with-swift/v2.0] 3장에서는 transforming operator에 대해서 배워봅니다. Transforming operator 는 publisher 로 부터 받은 값을 subscriber 가 쓸 수 있는 형태로 변형하는 작업을 합니다. Operators are publishers 콤바인에서 pulisher 로 부터 온 값에 operation을 수행하는 메서드를 Operators 라고 부릅니다. 각각의 operator는 publisher 를 반환합니다. 다시 말하자면 Operator 는 publisher로 부터 upstream value 를 받아와 값을 변형하고 downstre.. 2020. 10. 28.
Swift Enclosure vs Closure, ViewBuilder? SwiftUI의 ViewBuilder 를 공부하다 이런 표현이 나왔다. (Raywenderlich SwiftUI by tutorials p.386) This provides a view inside the ForEach loop that you passed in. ForEach uses a ViewBuilder to create a parameter for the view-producing enclosure. You’ll now update the GridView so it can take such an enclosure to define the contents of each cell in the grid. view-producing enclosure, take such an enclosure to de.. 2020. 10. 27.
#2 Publishers & Subscribers [출처:www.raywenderlich.com/books/combine-asynchronous-programming-with-swift/v2.0] 목차 Publisher Subscriber Cancellable 어떻게 동작하는지 custom subscriber 만들기 Future Subject Dynamically adjusting demand type erasure Challenge Keypoint Getting started playground starter project 설명 Hello publisher Combine 의 중심에는 publisher protocol 이 있다. 이 프로토콜은 하나 이상의 subscriber 들에게 연속되는 값을 계속해서 전송할 수 있는 타입이 필요로 하는 것들을 정의하.. 2020. 10. 27.
#1 Hello, Combine [출처:www.raywenderlich.com/books/combine-asynchronous-programming-with-swift/v2.0] 목차 비동기 프로그래밍 이란 Combine의 원천 Combine 기본 Combine의 장점 앱 아키텍쳐 샘플 프로젝트 요약 Declarative 하고 reactive 한 앱을 위한 Combine을 배워보자 애플의 말에 따르면 "The Combine framework provides a declarative approach for how your app processes events. Rather than potentially implementing multiple delegate callbacks or completion handler closures, you.. 2020. 10. 27.
#15 Complex Interfaces SwiftUI는 UI 디자인의 새로운 패러다임을 제시한다. UIKit 이나 AppKit 이나 다른 framework에서 제공하는 기능이 전부 같진 않다. 좋은 뉴스는 UIKit 이나 AppKit으로 만든 모든걸 SwiftUI로 재창조 할 수 있다는 점이다. SwiftUI 이전에 앱을 만들었다면 이미 만들어 놓은 custom control들이 있을 것 이다. SwiftUI는 UIkit 이나 AppKit과 협력하여 view 와 view controllers에 있던 view 를 재사용 할 수 있다. SwiftUI는 framework 기반으로 build 하고 없는 기능을 추가할 수 있다. 이 기능을 사용하면 기본 프레임워크 내에서 기능을 복제하거나 확장할 수 있다. 이번 챕터에서는 UIKit으로 된 open s.. 2020. 10. 27.
#14 Animations Animation의 필요성 good app 과 great app의 차이는 detail 에서 온다. 적재적소에 Animation을 사용하는 건 사용자에게 즐거움과 다른 앱과의 차별성을 줄 수 있다. Animation 은 앱 사용을 더 즐겁게 만들고 특정 영역에 사용자를 집중 시킬 수 있다. 좋은 Animation은 앱을 매력적이고 사용하기 쉽게 만들어 준다. SwiftUI 에서의 Animation AppKit 이나 UIKit 보다 훨씬 간단하다. SwiftUI Animation은 지루한 작업을 모두 처리하는 더 높은 수준의 추상화 이다. animation들을 합치거나 겹치거나 고려할 사항없이 그냥 멈출 수 있다. state 관리의 복잡성은 framework 가 담당한다. 복잡성과 edge case 를 처리.. 2020. 10. 27.
#16 Testing & Debugging 앱에 테스트를 추가하면 자동으로 앱이 예상 한대로 작동하는지 확인할 수 있다. 테스트에서 코드가 예상대로 작동하는지 확인할뿐만 아니라 향후 수정으로 인해 기존 기능에 영향을 주는 지 확인 할 수 있다. 이 장에서는 SwiftUI 앱에서 UI 테스트를 구현하는 방법과이 새로운 패러다임에서 UI를 테스트 할 때 주의해야될 점에 대해서 알아본다. Different types of tests 앱에서 사용할 테스트에는 세 가지 유형이 있습니다. 복잡성이 증가하는 순서대로 단위 테스트 (unit test) 통합 테스트 (integration test) 사용자 인터페이스 테스트 (ui test) unit test 모든 테스트의 기초이자 다른 모든 테스트의 기초는 unit test 이다. 각 unit test는 함수가.. 2020. 10. 26.
SwiftUI in UIKit vs UIKit in SwiftUI SwiftUI : declare the user insterface and behavior for your app on every platform UIKit : construct and manage a graphical, event-driven user interface for your iOS or tvOS app SwiftUI 프레임워크를 적용할 때 2가지 옵션이 있다. SwiftUI 프로젝트에 UIKit 통합하기 (UIKit 과의 data dependency 가 있는) UIKit 프로젝트에 SwiftUI 통합하기 UIKit 프로젝트에 SwiftUI를 통합하는 방법 SwiftUI 로 작성된 ContentView를 준비한다. storyboard에 Hosting Controller 를 만들고 segue를 .. 2020. 10. 26.
SwiftUI size rendering algorithm SwiftUI 에서 size 를 결정하는 방식은 UIKit 과 다르다. UIKit 은 parentView 를 기준으로 childView 의 size를 결정하는 반면 SwiftUI는 childView를 기준으로 parentView 가 resizing 될 수 있다. (물론 parentView 가 몇가지 size를 child 에게 제안한다.) 순서대로 나열해 보자면 1. The parent view determines the available frame at its disposal. 본인이 제공가능한 view size 계산해서 2. The parent view proposes a size to the child view. 그걸 child 에게 제안한다. 3. Based on the proposal from t.. 2020. 10. 26.
#13 Drawing & Custom Graphics 더 복잡한 앱을 개발하기 시작하면 SwiftUI가 제공하는 기본 제공 컨트롤보다 더 많은 custom 을 위한 유연함이 필요하다. SwiftUI는 앱 내에서 그래픽 생성을 지원하는 풍부한 라이브러리를 제공한다. 그래픽은 사용자에게 정보를 효율적이고 이해하기 쉽게 전달한다. 예를 들어, 동일한 정보를 그래픽으로 보는게 읽는 것 보다 시간이 덜 걸린다. 이 장에서는 공항 앱을위한 몇 가지 awards 그래픽을 만들어 SwiftUI에서 그래픽을 사용해본다. Creating shapes starter project 에는 작은 공항을 위한 앱이 있다. 3개의 award 뱃지를 만들 것 이다. 뱃지를 그릴 FirstVisitAward.swift 파일을 만들고 AirportAwards.swift 에 FirstVisi.. 2020. 10. 23.
#12 Conditional Views 이전 챕터에서는 대표적인 navigation을 연습해봤다. 이번장에서는 특정 조건에서만 보여지는 view (conditional view) 에 대해서 배워본다. conditional view 는 특히 사용자의 현재 상황에서 다음 상황으로 넘어가기 전 중요한 메시지를 보여주거나 사용자로 응답을 받아야 하는 경우에서 유용하게 쓰인다. navigation stack 외부에서 view 를 보여주는 것은 사용자는 해당 view의 작업에 집중할 수 있다. 또한 필수적인 정보를 보여주거나 필요한 정보를 요청하는 방법을 제공한다. starter 프로젝트는 tab-navigation 으로 구성된 구조가 있다. 이 구조에서 SwiftUI 가 제공하는 여러 conditional view 를 사용해 볼 것 이다. Displa.. 2020. 10. 23.
#11 Lists & Navigation single view 인 앱은 거의 없다. 대부분의 앱들은 여러개의 view 를 가지고 그들 사이를 부드럽게 navigate 할 수 있는 방법을 제공해야 한다. navigation 을 설계할 때는 여러 요구 사항의 균형을 맞춰야 한다. 데이터를 사용자에게 논리적으로 제공해야 하며 특정 작업을 수행하는 방법을 쉽게 파악할 수 있도록 해야한다. SwiftUI는 데이터를 보여주면서 navigation을 관리할 수 있는 통일화된 interface를 제공한다. 이번 챕터에서는 view 들 간의 여러 type 의 navigation을 쌓으면서 어떻게 데이터를 사용자에게 나타내는지에 대해서 배우게 될 것 이다. Getting started starter 프로젝트를 열면 공항을 위한 앱의 초기버전이 들어있다. 이번 챕.. 2020. 10. 22.
#10 Gestures 모바일 앱의 UI를 개발하는데 있어 동적인 요소들은 시각적으로 부드럽게 화면이 업데이트되는 경험을 줄 수 있다. 이번 챕터에서는 제스쳐와 같은 user interaction이 어떻게 추가되고 합쳐지고 custom 하게 전달되서 특별한 사용자 경험을 줄 수 있을 지에 대해서 알아본다. Kuchi 앱에서 탭바를 추가해 새로운 단어를 배우는 화면을 추가할 것 이다. Adding learn feature 두개의 탭으로 구성된 탭바를 만들 것 이다. 배우는 화면 (이번에 만들 것이다) 기존 challenge 화면 먼저 배우는 기능을 할 최상위 empty view 를 만들어 준다. 여러개의 파일로 구성될 것인데 Learn group으로 묶어준다.(practice folder 와 같은 level 에 위치한다.) 그리.. 2020. 10. 22.
#9 State & Data Flow 이전 챕터에서는 UI를 만들기 위해 자주 사용되는 UI component를 사용해보았다. 이번 챕터에서는 SwiftUI의 또다른 특징인 state: "상태" 에 대해서 배워본다. MVC: The Mammoth View Controller UIKit 이나 AppKit에서 MVC 컨셉에 대해서 익숙할 것 이다. 원래는 Model-View-Controller 의 개념이지만 Massive View Controller 라는 별명도 가진다. MVC에서 View 는 UI를 담당하고 Model 은 데이터, Controller 는 그 둘을 동기화 시켜주는 접착제 역할을 한다. 하지만 그 역할은 자동으로 되는게 아니라 view 가 update 되고 data가 바뀌는 모든 case 를 고려해 명시적으로 코드를 작성해야 한다.. 2020. 10. 22.
#8 Introducing Stacks & Containers 이전까지 TextField, Button, Slider, Toglgle 과 같이 흔히 쓰이는 SwiftUI control 에 대해서 배워봤다. 이번 챕터에서는 연관된 view들을 묶는 container views 에 대해서 배워볼 것이다. Layout and priorities UIKit 과 AppKit 에서는 view 에 제약조건을 주기 위해 Autolayout을 사용했다. 보통의 규칙은 parent view 기준으로 child view의 사이즈를 결정하고 contraint 를 추가하는 것 이였다. (child view의 width 와 height 가 명시되있지 않으면) 반면에 SwiftUI는 반대로 동작한다. child view 가 parent 가 제시한 size 에 따라 크기를 선택한다. 만약 Te.. 2020. 10. 22.
Inset이 뭘까 매개 변수를 제공하지 않으면 SwiftUI는 네 방향 (상단, 하단, 선행 및 후행) 및 .stretch resizing mode 모두에 대해 inset 이 없다고 가정합니다. 여기서 말하는 Inset 이 뭘까 더 큰 물체 내에 위치하고 있는 무언가 라고 사전은 설명한다. 그럼 Bound 와 Frame 과 같은 건가 싶기도 한데 iOS - Difference Between Offset And Inset When Setting UIView Shadow? iOS - Difference Between Offset And Inset When Setting UIView Shadow? So I wanted to put a 5 pixel shadow on my UIView on the top, left, and ri.. 2020. 10. 21.
#7 Controls & User Input 이전 장에서 Text와 Image를 배워봤다면 이번장에서는 자주 사용하는 control 에 대해서 배워본다 (TextField, Button, Stepper) A simple registration form 이름 적는 등록 화면을 만들어 볼 것이다. A bit of refactoring 대부분의 경우 재사용성과 코드의 간결함을 위해 리팩토링 작업이 필요하다. 그래서 WelcomView 리팩토링 부터 시작한다. 배경화면 이미지 컴포넌트화 배경화면 이미지를 담을 새로운 SwiftUI view 파일을 만들고 배경 코드를 복붙한다. 그리고 다시 ContentView 에서 중복되는 코드 부분을 방금 만든 컴포넌트로 대체한다. 두가지 리팩토링을 더 진행해봐라 LogoImage.swift : Welcome view .. 2020. 10. 21.
#6 Intro to Controls: Text & Image Intro SwiftUI 를 배워보니 UIKit은 옛날 방식 같지 않는가? 이전 챕터에서는 SwiftUI 의 수박 겉핥기였다. 이번 챕터에서는 UI 개발에서 가장 많이 사용되는 control들을 가지고 작업해볼 것이다. (UIKit 와 AppKit 에도 있는) Getting started Kunchi 라는 language flashcard 앱을 다음 5장 동안 만들어 볼 것이다. starter 프로젝트를 열어보면 거의 비어있는걸 볼 수 있다. Welcome 그룹에서 새롭게 SwiftUI view 를 추가한다. (이름: WelcomeView.swift) Changing rootview 방금 만든 Welcome.swift 라는 SwiftUI view 를 시작점으로 설정해야한다. SceneDelgate 에서 .. 2020. 10. 21.