iOS
-
[SwiftUI] Navigation (feat. WWDC2022)iOS 2024. 11. 6. 13:45
이 포스트는 WWDC2022: SwiftUI Cookbook for Navigation 세션의 내용을 공부하며 정리한 글입니다.잘못 이해한 부분이 있다면 댓글 남겨주세요 :) NewAPIsSwiftUI의 Navigation API는 화면전환을 데이터에 기반하여 프로그래밍 방식으로 제어하는 것을 지향한다.기존의 NavigationView에서 NavigationStack으로 변경되면서 좀 더 Programatic한 화면전환이 가능해졌다고 한다. NavigationStack / NavigationLink NavigationStack(path: $path) { NavigationLink("Details", value: value) } 2-Column NavigationSplitViewNaviga..
-
[SwiftUI] UI Update (feat. WWDC2021)iOS 2024. 11. 3. 19:34
이 포스트는 WWDC2021: Demystify SwiftUI 세션 중 UI Update에 대한 내용을 공부하며 옮겨적은 글입니다.오역이나 잘못 이해한 부분이 있을 수 있으니 틀린 부분은 댓글로 알려주세요 :) View의 구성의존성은 view의 input이며, 의존성이 변화할 때 새로운 body를 생성하기 위해 View가 필요하다body는 View의 hierarchy를 구성하는 영역이다.Action은 View의 종석성을 변경하는 트리거이다. DogView DiagramButton을 클릭하면 개에게 보상을 주기위한 action을 전달한다.그 결과 개가 변경되고 의존성이 변경되었기 때문에 DogView는 새 body를 생성한다.Data Flow에 대한 더 자세한 내용은 Data essentials in ..
-
[SwiftUI] View의 Lifetime (feat. WWDC 2021)iOS 2024. 11. 1. 01:23
이 포스트는 WWDC2021: Demystify SwiftUI 세션 중 View lifetime에 대한 내용을 공부하며 옮겨적은 글입니다.오역이나 잘못 이해한 부분이 있을 수 있으니 틀린 부분은 댓글로 알려주세요 :) View value 변화 시의 로직동일한 View 정의에서 생성된 서로 다른 2개의 값(PurrDecibelView)이 있는 경우.SwiftUI는 비교를 수행하고 View가 변경되었는 지 알기 위해서 두 값의 copy를 유지할 것이다.그 후 변경 전의 값은 파괴된다. Key pointView value는 일시적이고 View의 lifetime에 의존하지 않아야 한다.하지만 View value의 identity를 제어할 수 있어야 한다. View lifetimeView가 생성되고 화면에 보여..
-
[SwiftUI] View Identity (feat. WWDC 2021)iOS 2024. 10. 31. 16:45
이 포스트는 WWDC2021: Demystify SwiftUI 세션 중 View Identity에 대한 내용을 공부하며 옮겨적은 글입니다.오역이나 잘못 이해한 부분이 있을 수 있으니 틀린 부분은 댓글로 알려주세요 :) Explicit IdentityView나 data의 type을 하나의 그룹으로 묶을 수 있다특정 View를 참조하기 위한 custom identifer를 제공할 수 있다. UIKit/Objective-C: Pointer IdentityUIKit과 Objective-C에서 각각의 UIView/NSView 객체는 각자가 할당된 메모리 주소를 향한 유니크한 포인터를 갖고 있다.이 포인터를 활용해 각각의 뷰를 참조할 수 있다.만약 두 개의 UIView/NSView가 같은 포인터를 공유한다면 이 ..
-
[RxSwift] UILabel이 subscribe를 사용할 수 없는 이유iOS 2024. 7. 31. 12:49
비동기 프로그래밍을 효과적으로 구현하고자 RxSwift와 RxCocoa에 의존성을 갖는 Swift 프로젝트에서는 UI객체들의 프로퍼티 값을 조회하여 값을 조작하거나 새로 설정하는 이벤트를 작성하기 위해 아래와 같은 코드를 자주 사용하게 된다. 예시 코드 testTextField.rx.text.subscribe { value in print("next - ", value)} onError: { error in print("error - ", error)} onCompleted: { print("competed")} onDisposed: { print("disposed")} 그런데 UITextField와 마찬가지로 UILabel 역시 text프로퍼티를 갖고 있지만 이 경우에는 아래 이미..
-
Alamofire를 구조화된 코드로 사용하기 (feat. URLRequsetConvertible)iOS 2024. 6. 19. 14:54
Alamofire를 사용해 API를 호출하는 작업을 여러번 해보면서 Alamofire의 request 함수를 호출하는 작업이 몇 가지 변수들의 조합으로 패턴화 된다는 생각이 들었다. 어떻게 하면 이 반복되는 패턴들을 효율적으로 처리할 수 있을 지 고민했던 흔적을 기록해보려 한다. 이 글을 읽으면 좋은 분들1. Almofire 사용시 반복적인 URL 문자열 선언 작업을 줄이고 싶은 분2. URLRequestConvertible의 사용법과 작동원리를 풀어쓴 글을 보고싶은 분 먼저 처음 alamofire를 사용하는 예시 코드를 살펴보는 것으로 본 포스트를 시작해보겠다. Alamofire request get request 호출 예시 let url = "https://API.example.com..
-
[UIKit] 화면전환 코드를 프로토콜로 사용하기iOS 2024. 6. 4. 18:56
UIKit을 공부하던 중 여러 뷰 컨트롤러에서 반복적으로 사용되는 화면 전환 코드들을 프로토콜로 작성해 한 파일에서 관리하면 보다 효율적인 코드를 작성할 수 있겠다는 생각이 들었다. 그러려면 프로젝트에 작성된 ViewController들을 부모인 UIViewController타입의 파라미터에 할당할 때 다운캐스팅을 하지 않아도 내부에 작성된 코드들이 정상적으로 실행될 수 있는 지 확인이 필요해 먼저 playground에서 테스트 코드를 작성해보았다. 테스트 결과를 바탕으로 아래와 같이 프로토콜을 작성하였다 화면 전환 프로토콜 protocol ViewTransition { func pushAfterView(view: UIViewController, backButton: Bool, anim..