개발삽질기/iOS 8

CS193P 3편,4편 정리 (2) : MVVM으로 앱 만들기

일단... 4강까지 듣고 난 후기,, 와 처음부터 CS193P를 들을걸,, 원리를 알려주니까 정말 이해하기 쉽다. 이제 나 진짜 앱개발이 뭔지 알겠다. ---- 3줄 요약 - Model : 앱의 데이터와 동작을 관리함 -> Struct이지만 데이터와 동작을 관리해서 변할 수 있기 때문에 Mutating을 사용함 - View : 데이터의 변화와 유저가 사용함에 따른 동작에 대한 반응을 뷰에서 보여줌 - ObservedObject로 뷰 모델을 관찰함 - ViewModel : 뷰와 모델 사이에서 데이터와 동작하는 것들을 전달함 -> ObservableObject와 Published model을 사용함 ---- 1,2편에서 view를 만들어줬으니까 Model과 ViewModel을 만들어줘야 한다. Model은 ..

개발삽질기/iOS 2023.07.02

CS193P 2021 3편 정리(1) : MVVM, Struct & Class, Generic, Function

https://www.youtube.com/watch?v=--qKOhdgJAs&list=PLpGHT1n4-mAsxuRxVPv7kj4-dQYoC3VVu&index=3 이번 시간에는 MVVM이 뭔지, Struct,Class, Generics, Function에 대해서 배웠다. 1. MVVM이란? 스위프트UI를 사용하는 것은 곧 MVVM을 사용하는 것이라고 할 수 있다고 한다. (유아이킷은 MVC)를 사용한다. MVVM은 Model - View - ViewModel로 이루어 져 있는데, Model은 데이터와 로직을 구성한다. View는 화면을 나타내는 것으로, 화면의 변화는 항상 View가 확인하게 된다. 데이터의 흐름은 Model에서 View로 흐르고, View는 body var을 통해 화면이 어떻게 보일지..

개발삽질기/iOS 2023.07.02

CS193P 1편,2편 요약

내가 지금 스위프트 UI로 개발하는 중인데, 내부 코드가 어떻게 돌아가는지 그 동작이 궁금한 것들이 많아서 강의를 들어볼까 고민했다. 그러던 중 친구가 CS193P 강의를 극찬을 하길래 봤는데 1시간 30분 정도 16개 강의라 별로 많지 않은 것 같아 호다닥 들어보고자 했다. https://www.youtube.com/watch?v=bqu6BquVi2M&list=PLpGHT1n4-mAsxuRxVPv7kj4-dQYoC3VVu&index=2&t=1296s Lecture 1: Getting started with SwiftUI 1. struct ContentView: View는 View 특성을 가진 ContentView라는 이름의 구조체라는 것, 이렇게 명시화 해주는 것은 함수형프로그램에서 출발함, 함수형 프..

개발삽질기/iOS 2023.07.01

@escaping 클로저란 뭘까?

@escaping은 클로저가 함수의 호출이 끝난 후에 호출될 것이라고 나타내는 키워드이다. 클로저가 함수의 범위를 "탈출" 한다는 것을 나타낸다. @escaping은 클로저가 함수 호출이 끝난 후에 실행되거나, 백그라운드 작업으로 사용될때 유용하다. 비동기 API 호출에서 completion handelr처럼 API 호출이 끝난 후에 실행되는 클로저에 주로 사용된다. 스위프트에서 클로저를 매개변수로 가지는 함수를 작성할때, 함수의 실행이 끝난 후에도 그 클로저가 어딘가에 저장되어 나중에 호출되어야 한다면 해당 클로저 매개변수 앞에 @escaping 키워드를 붙여서 표기해야 한다. var completionhandler: (() -> Void)? = nil func someFunction(completio..

개발삽질기/iOS 2023.06.30

AlignmentGuide가 뭘까? + 세그먼트 컨트롤 삽질 시작

내가 지금 만들고 있는 프로젝트에서 기본 Segment Control이 아니라 커스터마이징 된 Segmented Control이 필요하다 아래에서 기본 세그먼트 컨트롤은 일일, 주간, 월간 부분이고, 커스터마이징된 SegmentedControl은 지출목록과 지출분석이다. 어떻게 만들 수 있을지 찾아보던 중 딱 내가 원하는 모습을 만든 사람이 있었다. https://kazaimazai.com/custom-segmented-picker-with-swiftui/ Custom Segmented Control Picker with SwiftUI Not long ago, I needed a segmented picker, and as it usually happens, native things didn't fit ..

개발삽질기/iOS 2023.06.30

@inlinable이 뭐지?

@inlinable은 코드 최적화를 돕는 특수한 속성이라고 한다. 사실 inline은 swift에만 있는 기능이 아니라 일반적인 프로그래밍 언어에 있는 내용이다. 인라인화는 컴파일러가 함수호출을 함수 본문으로 바꿔치기 하는 것을 의미한다. 이로 인해서 실행 시에 함수 호출로 인한 오버헤드가 줄어들고 프로그램의 성능이 향상 될 수 있다. 인라인화가 적용되지 않을 경우는 다음과 같지만 override func viewDidLoad() { super.viewDidLoad() self.printSquareNumber(number: 1) } func printPlusOne(number: Int) { print("result : \(number * number)") } 인라인이 적용되는 경우는 다음처럼 사용할 수 ..

개발삽질기/iOS 2023.06.30

ViewBuilder가 뭐지?

ViewBuilder는 @ViewBuilder로 사용하는데, 복수의 뷰를 가지고 새로운 복합뷰를 생성할 수 있는 클로져를 정의할때 사용된다고 한다. Swift의 DSL(Domain Specific Language)구문을 사용해서 여러뷰를 조합하고 조건부 뷰를 작성하는 등의 기능을 가능하게 한다고 한다. 여기서 Swift의 DSL은 선언적 UI 구조를 정의하기 위한 언어로, Swift의 DSL을 사용하면 UI의 구조와 동작을 명확하고 간결하게 표현할 수 있다고 한다. 아래처럼 조건에 따라 달라지는 경우, 뷰를 다르게 보여줄 수 있다. 그렇다면 일반적인 Button , text는 뭐란 말일까? SwiftUI에서는 ViewBuilder 없이 그냥 View가 만들어진다. 자세히 봤더니 Button에는 ViewB..

개발삽질기/iOS 2023.06.30

왜 Padding을 안줬는데 Padding이 변할까

나는 요즘 P를 위한 가계부를 만들고 있다. 직접 판매를 목표하다보니까 생각보다 볼륨이 많아 졌다. 쨋든 각설하고 이제 개발을 들어갔다. 내가 맨 처음에 만들려고 했던 뷰는 이거였다. 메인뷰에 여러 요소가 들어가 있어서 이번에 작업할때 여러 요소를 분리해서 메인뷰에 합치도록 작업하려고 해봤다. 메인 헤더를 만드는데, 오늘 부분을 누르면 하프시트가 떠서 데이터피커가 뜨는 걸 기대했는데 데이트 피커를 활성화하려면 데이트피커를 누르는 뷰 모양이 디폴트인것 같아서 여러 궁리하다가 일단 넘겼다. 빨리 메인뷰라도 만들고 싶은데, 데이트 피커 버튼 모양을 커스터마이징 방법을 찾는 게 조금 어려웠다. 일단 이 부분은 기존 데이트 피커 선택 부분을 선택하고, 나중에 바꿔봐야 겠다. 이걸 만드는 과정에서 패딩이 자동적(?..

개발삽질기/iOS 2023.06.29
반응형