WooKoo Blog

물과 같이

개발 124

Swift 모델에 파싱하기

MVC나 MVVM에서 모델에 데이터를 담을 때 api를 이용해서 json 데이터나 xml데이터를 파싱해서 넣어줘야할 필요가 있을 때가 있다. 어떻게 모델에 데이터를 집어넣을 수 있는지 알아보자. 일단 모델의 변수명!!!! 처음에 왜 파싱이 안되고 nil로 떨어지나 했더니 모델을 정의할 때 스트럭처 네임을 내 마음대로 지으면 안된다. (정확히는 스트럭처명은 상관없으나 맵핑되어야할 데이터들의 컬럼명은 json 같아야함!!) { "status": "ok", "totalResults": 20, "articles": [ { "source": { "id": null, "name": "CBS Sports" }, "author": "Brent Brookhouse", "title": "UFC 260 results, hi..

개발/개발 2021.12.03

Swift - 프로토콜 맛보기

프로토콜은 왜 쓰는가?? 1. 불필요한 상속을 피하고 각기 다른 기능을 구현하고 싶을 때 2. 델리게이트 패턴을 사용하고싶을 때 Anyobject, class을 상속 시 클래스에서만 프로토콜을 사용 할 수 있게 된다. 좋은점 - ARC 메모리 관리 시스템은 클래스를 다루고 있을 때 쉽게 할당할 수 있습니다(객체의 참조 횟수 증가). 이러한 정보가 없으면 컴파일러는 구조체가 프로토콜을 따를 경우를 대비해 할당과 해제를 고려해야하므로 비용이 많이들 수 있습니다. 옵셔널 구현은 @objc를 프로토콜 앞에 붙여 준 후 @objc optional func funcName() 이런식으로 구현해준다.(프로퍼티도 가능) 델리게이트 패턴 구현 시 기억해야할 것 1. 채택쪽 프로토콜 채택, 메서드 구현, 대리자 지정 2...

개발/개발 2021.11.02

RxSwift - Tap과 Action 으로 이벤트 처리

사실 둘의 장단점과 언제 어떤 걸 쓰는지 잘은 모르지만 액션처리에 대해 위 두 방법이 있다는 것을 정리해보면서 공부해보려고한다. 먼저 RxCocoa의 Tap 으로 구현 할 때 해당 액션 버튼의 아울렛을 연결 해둔 뷰 컨트롤러에서 다음과 같이 사용한다 buttonName.rx.tap .throttle(.milliseconds(500), scheduler: MainScheduler.instance) .subscribe(onNext:{[weak self] _ in // 방출 할 이벤트나 처리 print("Code") }) .disposed(by: rx.disposeBag) 위 방법의 좋은점은 해당 뷰 컨트롤러에서 이벤트의 처리를 간편하게 구현 할 수 있다는 점?? 쓰로틀은 해당 버튼 이벤트가 0.5마다 방출하..

개발/개발 2021.10.24

[iOS] - iOS 의존성 주입(Dependency Injection) 알아보기 - 2

그럼 IOC 컨테이너인 SwInject를 간단히 이용해보도록하고 의문이 드는 것들에 대해 정리해보도록 하겠다. 들어가기 앞서 쓰이는 용어들이 있다. container: 여러곳의 외부에서 인스턴스를 주입할 텐데 컨테이너라는 한 곳에서 모든 인스턴스를 다 가지고 있다. register: 컨테이너에 내가 사용할 인스턴스를 만들어서 등록 할 때 쓰는 용어 resolve: 컨테이너에게 인스턴스를 달라고하면 컨테이너에서 꺼내줄 때 사용하는 용어 설치 방법은 생략하겠다. 코코아팟, 카르타고, 스위프트 패키지매니저 등 다 됌! 코드로 된 뷰 컨트롤러에 라벨을 추가하고 앞에서 사용했던 nameProtocol을 컨테이너를 이용해서 외부 주입된 name을 사용해보도록 하겠다. 클래스의 외부는 AppDelegate가 될 것이..

개발/개발 2021.08.23

[iOS] - iOS 환경에서 의존성 주입(Dependency Injection) 알아보기

의존성 주입을 하면 좋은 점이 많다고 하길래 해당 내용을 iOS를 기준으로 공부해보도록 할 것 이다. 먼저 기본적으로 알아야할 개념들이 너무 많아서 전부 다룰 수 있을지 모르겠지만 천천히 정리해보도록 하겠다. 1. 의존성 주입 (Dependency Injection) 의존성 주입을 한 문장으로 정리하자면 외부에서 초기화해서 클래스 안에 할당해주는 것입니다. 2. 장점 (왜쓰는가?) 그럼 의존성 주입을 사용하면 뭐가 좋을까? 1. 재사용성이 높아짐 2. 테스트 용이 3. 코드 단순화 -> 결합도는 낮추면서 유연성과 확장성 향상 3. 그럼 의존성이 뭔지 주입이 뭔지 알아보자 의존성이란 Mobile 클래스를 Task클래스에서 사용하고 있으니까 의존성이 생기게 된다. 이처럼 어떠한 클래스에서 다른 클래스를 사..

개발/개발 2021.08.23

[iOS] - The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions (Rx 타입추론 에러)

The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions RX를 공부하면서 위 에러가 나왔다. 타입추론을 하기 어려워서 빌드를 할 수 없다는 것인데 나는 combineLatest 오퍼레이터와 map을 함께 사용하면서 발생했다. 이 옵저버를 변수에 넣고 map을 사용해보자. 즉 쪼개기를 잘 해보면 빌드 할 수 있다.

개발/개발 2021.07.22

[WWDC] - WWDC 2021 주요 변경 부분 정리 요약!

2021년 6월 8일 있었던 WWDC 21 주요 내용들을 한번 정리해보았습니다. 가볍게 봐주세요. 아이폰!! 1. iOS 15 - 페이스 타임 iOS 15버전에서 눈에 띄는 가장 큰 변화는 페이스 타임(Face Time)이다. 기존 페이스 타임은 영상 통화였으나 이번 업데이트는 링크 제공을 할 수 있다. 링크를 통해서 페이스 타임에 접속 할 수 있고, 상대방이 윈도우, 안드로이드를 사용해도 가능하다. (기존에는 아이폰 to 아이폰 만 가능했다.) 또한, 화면 공유 기능도 가능하다. (업무 지원 시 고객님의 화면을 보면서 설명해 줄 수 있을 듯??) 에어팟 프로 같은 노이즈 캔슬링 원리를 페이스 타임에도 적용하여 주변 잡음을 최소화 시켰고, 누가 말하는지 확실하게 표시가 가능해졌다. 2. 아이폰 iOS 1..

개발/개발 2021.06.15