iOS
-
[TIL] COW(Copy on Write)iOS/Swift 2022. 1. 10. 18:58
COW(Copy On Write)는 말 그대로 "값을 기록할 때 복사가 일어난다"는 뜻이다. 찾아보니 Memory Management분야에서 Optimization기술 중 하나로 쓰이고 있다고 한다. Swift에서도 Optimization기술로 쓰이고 있다. COW는 CollectionType에서 적용이 된다. CollectionType은 Struct로 구성되어있기 때문에 ValueType이다 아래는 두 변수를 따로 선언해 주었을 때 발생하는 메모리 상황이다. let a = [1...30] let b = [1...30] ValueType에서는 대입연산자를 사용할 때 값복사가 일어난다. 하지만 COW가 적용됨으로 인해 메모리주소가 복사되는 현상이 발생한다. let a = [1...30] let b = a ..
-
[UIKit] ScrollView 안에 TableView 넣기iOS/UIKit 2022. 1. 5. 19:40
필수 요소 코드로 구현할 때에는 scrollView의 모든 edge에 대한 constraint가 존재, scrollView안에 contentView가 존재 ( 이번 경우에는 StackView를 사용) contentView의 넓이(스크롤 방향의 수직방향)에 대한 constraint가 존재. tableView의 고유한크기(intrinsicContentSize)를 flexible하게 만들어주어야 함. 참고 https://stackoverflow.com/questions/35028518/how-to-make-uitableview-fit-to-contents-size How to make UITableView fit to content's size I have a UITableView (let's call it ..
-
RxSwift로 리펙토링 맛보기iOS/RxSwift 2022. 1. 3. 16:27
과제중에 다음과 같은 화면을 구현하는것이 있었다. ViewController은 View를 소유하고 있어서, ViewController에서 View의 객체들에 addTarget을 구현해줬다. override func viewDidLoad() { super.viewDidLoad() mainView.startButton.addTarget(self, action: #selector(startButtonTapped), for: .touchUpInside) mainView.fotterLabel.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(loginLabelTapped))) } @objc func startButtonTappe..
-
[MVVM 연습 프로젝트][Lotto](2) - 기능 추가하기iOS 2021. 12. 30. 16:00
이전 게시글에서 완성한 Lotto프로젝트에 새로운 기능을 추가해보려고 합니다. 전까지는 임의로 회차를 지정해서 정보를 받아왔었는데, PickerView를 추가해서 여러 회차에 대해서 로또 당첨 정보를 얻어와보려고 합니다. 그리고 1등 당첨금액이 너무 길어서 읽기 불편했기 때문에, 숫자에 포맷을 지정해 보기 편하게 해 주겠습니다. 코드는 아래 명령을 통해 다운받으실 수 있습니다. git clone -b lotto_2 https://github.com/sseungmn/MVVM_Practice.git PickerView 추가하기 새로운 PickerView를 추가해보도록 하겠습니다. MVVM에 맞춰서 UI는 View에, 기능은 ViewModel에 구현해보면 좋을 것 같습니다. View에 UI추가하기 LottoV..
-
[MVVM 연습 프로젝트][Lotto](1) - MVVM으로 리펙토링iOS 2021. 12. 30. 01:39
이번에는 MVC로 만든 Lotto프로젝트를 MVVM으로 바꿔보겠습니다. MVVM flow의 핵심이 되는 Observable 클래스를 만들고, 그 클래스를 이용해서 MVVM으로 쉽게 전환할 예정입니다. 코드는 아래 명령을 통해 다운받으실 수 있습니다. git clone -b lotto_1 https://github.com/sseungmn/MVVM_Practice.git Observable 말 그대로, 관찰이 가능하다는 의미입니다. Observable.swift파일을 하나 만들어서 아래 코드를 작성합니다. import Foundation // 모든 타입에 대해서 Observable객체를 만들 수 있게 하기 위해서 // Generic을 사용합니다. T는 Int, String, [Int], Model 등등 모든..
-
Storyboard없이 Code로 UI구현하기iOS/UIKit 2021. 12. 28. 23:39
모든 UI를 Code만으로 작성하기 위해서, Main Storyboard를 없애줄 것입니다. ⁉️ Tip 시작하기 전에 간단한 팁을 하나 드리자면, 어떤 기능을 Storyboard에서가 아닌 Code로 구현하고 싶을 때 구글에 programmatically라는 키워드를 통해 검색하면 조금 더 유용한 정보를 얻을 수 있습니다! 총 3단계를 거치게 됩니다. 첫 번째, Storyboard를 제거해줍니다. Storyboard를 모두 제거한다고, LaunchScreen까지 제거하면 안 됩니다.. LaunchScreen을 코드로 작성해도 되나? 의 대답은 NO라고 하네요 두 번째, Target의 Main Inferface를 지우고, Info.plist의 Storayboard Name을 삭제해줍니다. Main Int..
-
[MVVM 연습 프로젝트][Lotto](0) - MVC로 만들어보기iOS 2021. 12. 28. 23:33
Device : 2021 M1 Macbook pro OS : macOS Monterey 12.0.1 Xcode : Version 13.1 (13A1030d) 안녕하세요! miniOS입니다. 이번에는 MVVM을 공부하면서 간단하게 적용해볼 수 있는 연습용 프로젝트를 만들어 보려고 합니다. 회차별로 로또 추첨 결과에 대해서 얻어오는 서비스를 만들어 보겠습니다. 코드는 아래 명령을 통해서 다운받을 수 있습니다. git clone -b lotto_0 https://github.com/sseungmn/MVVM_Practice.git 준비 로또 API https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo= Project Info.plist를 다른 위치..
-
[Architecture] MVVM에 대해서 알아보기iOS 2021. 12. 28. 23:23
Model 어플리케이션이 무엇을 할지를 담고있다. UI와 완전히 독립적이다. -> Model 파일에서는 UIKit이나 SwiftUI를 import하지 않는다. Data와 Logic을 다룬다. View 어플리케이션이 어떻게 보여질지를 담고있다. Stateless 가끔 View의 여러가지 테마중 어떤 테마인지에 따라서 View의 모습이 바뀌는 등 State에 종속적인 부분도 있다고 생각할 수 있다. 하지만 그것은 어플리케이션의 Logic과는 아무 상관이 없다. Declarative 코드에 있는 View가 모두 그려지고 나면 더 이상 바뀌지 않는다. 바꾸고 싶다면 다시 그려야 한다. ✔️ View의 `Declarative`에는 장점이 있다. code를 작성할 때 UI가 어떻게 생길지 쉽게 상상할 수 있고, 마..