Ray Wenderlich
-
Ch7. Controls & User InputRay Wenderlich/SwiftUI 2021. 2. 7. 20:12
Ch7. Controls & User Input Power to the user: the TextField title과 text binding으로 생성할 수 있다. title: placeholder binding: textfield에 보이는 텍스트와 프로퍼티를 연결 @State var name: String = "" ... TextField("Type your name...", text: $name) Spacer VStack { Spacer() // Self.Body /// The content view type passed to `body()`. typealias Content } struct BorderedViewModifier: ViewModifier { func body(content: Conte..
-
Ch6. Intro to controls: Text & ImageRay Wenderlich/SwiftUI 2021. 2. 7. 20:08
Ch6. Intro to controls: Text & Image Are modifiers efficient? Modifier는 새로운 view를 리턴한다. 정말 이게 최선일까? Modifier는 사용될 때마다 뷰를 전달받아 새로운 뷰를 만든다. Recursive한 동작이 일어나는 것이다. Modifier를 연속적으로 호출하면 뷰 안에 뷰 안에 뷰 안에 뷰가 있는 그런 구조다. 마트료시카 인형처럼 말이다 언뜻보면 자원낭비처럼 보인다. 하지만 SwiftUI는 이 Stack을 효율적인 자료구조를 통해 flatten하여 뷰를 렌더링하고 있다. 그러니까 modifier를 마음껏 써도 된다. Text("Welcome to Kuchi") .background(Color.red) .padding() Text("Wel..
-
Ch3. Transforming OperatorsRay Wenderlich/Combine 2021. 1. 27. 20:26
collect() ["A", "B", "C", "D", "E"].publisher .collect() .sink(receiveCompletion: { print($0) }, receiveValue: { print($0) }) .store(in: &subscriptions) // collect에 parameter전달하여 메모리 과다사용 방지 ["A", "B", "C", "D", "E"].publisher.collect(3) .sink(receiveCompletion: { print($0) }, receiveValue: { print($0) }) .store(in: &subscriptions) ["A", "B", "C", "D", "E"] finished ["A", "B", "C"] ["D", "E"] fi..
-
Ch2. Publishers & SubscribersRay Wenderlich/Combine 2021. 1. 27. 20:23
Hello Publisher let myNotification = Notification.Name("MyNotification") let center = NotificationCenter.default let observer = center.addObserver(forName: myNotification, object: nil, queue: nil) { (notification) in print("Notification received!") } center.post(name: myNotification, object: nil) center.removeObserver(observer) Notification received! Hello Subscriber let myNotification = Notific..
-
Ch1. Hello, Combine!Ray Wenderlich/Combine 2021. 1. 27. 20:22
애플이 말했다. ‘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 can create a single processing chain for a given event source. Each part of the chain is a Combine operator that performs a distinct action on the elements received from the previous step’'컴바인은 여러분의..
-
Ch2. The TDD CycleRay Wenderlich/TDD 2020. 10. 4. 21:55
4 Steps TDD는 4개의 단계가 있다. 이 단계들은 보통 컬러로 표현된다. (color coded) Red: 앱의 코드를 작성하기전에 실패하는 테스트를 작성 Green: 테스트를 통과시킬 수 있는 최소한의 코드를 작성 Refactor: 앱코드와 테스트코드를 정리 (리팩토링) Repeat: 모든 피쳐들을 구현할 때까지 이 사이클을 반복 Red: Write a failing test Production코드를 작성하기 전에, 실패하는 테스트 코드를 먼저 작성하자. class CashRegisterTests: XCTestCase { func testInit_createsCashRegister() { XCTAssertNotNil(CashRegister()) } } CashRegisterTests.defaul..
-
Ch1. TDD란 무엇인가?Ray Wenderlich/TDD 2020. 10. 4. 21:53
Why use TDD? TDD는 소프트웨어가 잘 작동하고, 미래에도 계속 잘 작동 할 것을 보장해준다. 코드를 전부 작성한 뒤, 테스트 코드를 작성할 수도 있다. Alternatively, you could skip writing tests altogether and, instead, manually test your code 하지만 TDD가 이런 방법에 비해 갖는 장점은? 는 앱이 기대하는 바와 같이 동작하는 것을 보장한다. 모든 테스트가 는 아니다. 는 failable, repeatable, quick to run and maintainable 해야 한다. TDD는 아래와 같은 방법론을 통해 좋은 테스트 작성을 보장한다. 첫 번째는 failing test를 작성하는 것이다. 말 그대로, 이 과정은 테..
-
RxSwift - MVC, MVVP with RxSwiftRay Wenderlich/RxSwift 2020. 2. 29. 22:14
MVCRxSwift는 MVVM과 엄청난 하모니를 자랑한다. 애플에서는 MVC를 주로 사용하여 훌륭한 시스템을 구축했다. 둘의 차이를 간략하게 알아보자.둘은 굉장히 가까운 사촌관계라고 볼 수도 있다. 하지만 그 둘은 분명히 다르다. 이 책에서 대부분의 예제를 MVC로 설명했다. MVC는 굉장히 직관적이고 간단한 앱을 만들 때 굉장히 유용하다.Controller는 모델과 뷰를 업데이트할 수 있는 중심역할을 하고,View는 데이터를 화면에 표현해주는 역할Model은 데이터를 Read/Write하며 저장하는 역할을 했다. MVC가 초반에는 앱을 만드는데 꽤나 좋은 패턴이다. 하지만 앱의 규모가 커질수록 많은 클래스들이 뷰도 모델도 아닌 상황이 발생한다. 자연스레 이런 애들은 컨트롤러로 때려박는다.우리가 흔히 범..