내용 - Publisher -> Operator -> Subscriber - Subscription [ Subscriber(구독자)가 Publisher(크리에이터)에 연결됨을 나타낸다.] - @Published Combine - 놈놈놈 - Publisher [발행하는 놈 (크리에이터)] - Subscriber [구독하는 놈] - Operator [변경하는 놈] 이벤트 발생 이벤트 가공 이벤트 소비 Publisher -> Operator -> Subscriber data를 그냥 보낼 수 있고 data를 알고 있는 상태로 보낼 수도 있고 data를 변형해서 보낼 수도 있다. Publisher 크리에이터 즉, 데이터를 배출하는 놈 구체적인 output 및 실패 타입을 정의 Subscriber(구독자) 이 요청..
데이터 전달. MVVM(1)과 MVVM(2)에서 공부한 건 Start 버튼(1번 손가락)을 눌렀을 때, 빈 View에 데이터를 받아와 뿌려주는 과정이다. 그럼 Next버튼(2번 손가락)을 눌렀을 때 다음화면으로 받은 데이터를 넘겨줘야 한다. 정리하자면 1. start 버튼을 누른다(1번 손가락) 2. ViewModel에서 버튼이 눌린 걸 감지한 후 네트워크와 통신을 한 다음 성공하면, 데이터를 모델에 담은 후(변경이 된 후) didSet이 감지한다. 3. View에 있는 ViewModel의 인스턴스에서 didSet에 선언해 놓은 클로저를 호출하고 변경된 데이터를 가공해 놓은 View관련 변수를 호출하면 View가 변경된다. 4. Next 버튼을 누른다(2번 손가락) 5. 첫 번째 View에 ViewMod..
내용: View -> ViewModel, didSet + closure ⭐️ViewModel - View를 위한 (데이터 모델): 모델(데이터)을 과 로직을 가져야한다. fetchMusic {...}의 결과가 success 가됐을때 self.music에 데이터가 담긴 다고 했다. 즉, var music: Music? 에 데이터가 담긴다는 소리고 이 담긴 시점(데이터가 변한 것)을 늘려야 한다. 어디에? View -> ViewModel 1) View(Controller + View)에서 start버튼이 눌림 @IBAction func startButtonTapped(_ sender: UIButton) { viewModel.handleButtonTapped() } 2) Start Button이 눌렸다는 걸 ..
MVC -> MVVM 변경하는 과정에서 클로저와 ARC관계에 대해 공부하고자 정리. - 내용: MVC, MVVM, closure, ARC, unowned, waek Model = Model // 정확하게 말하면 DataClass를 말한다. View = Controller + View // MVC에서 VC를 같이 사용. ViewModel // View를 위한(데이터)모델, 로직을 가짐. ⭐️ViewModel 사용자의 인풋(View에서 이벤트가 발생하면)을 받으면 Model의 데이터를 가지고 View에 전달해 주어 View(화면)이 변경된다. ViewModel은 일반적으로 class로 작성한다 why? class는 참조타입이고 struct는 값타입(데이터의 공유와 변경감지가 class보다 복잡할 수 있다...
1. 사용방법 Preview를 보고 싶은 곳에서 아래 코드를 사용합니다. makeUIViewController(context: Context) 내부에서 이름을 Preview를 보고 싶은 ViewController 이름으로 변경해 주시면 됩니다. #if DEBUG import SwiftUI struct Preview: UIViewControllerRepresentable { // 여기 ViewController를 변경해주세요func makeUIViewController(context: Context) -> UIViewController { ViewController() } func updateUIViewController(_ uiView: UIViewController,context: Context) { ..
URLSession iOS을 개발하면서 데이터를 공유받는 방법 중 REST API를 주로 사용한다. URLSession은 REST API를 사용하기 위한 Swift 기술 중 하나이다. 동작 순서는 URLSessionConfiguration 결정 -> URLSession 객체 생성 -> 사용할 Task 결정 -> 필요한 Response 메서드 작성 -> Task 실행 -> Task 완료 -> Response 메서드 실행 URLSessionConfiguration 결정 URLSessionConfiguration은 URLSession 객체를 생성하기 위한 클래스이다. 공식문서에서는 URLsession의 동작과 정책을 정의하는 설정 객체라고 정의돼어져 있다. [공식문서] URLSessionConfiguratio..
네트워크의 기원을 정리해 보고, URLSession을 공부해 볼 거다. URLSession을 공부함에 있어 필요한 지식은 아니니 "사전지식" 부분은 안 읽으셔도 무방함. 사전지식 네트워크 역사 네트워크라는 개념은 서로 자원을 공유할 수 있도록 결합된 각각 독립된 컴퓨터기능의 집합이다. 목적은 지리적으로 분산된 두대 이상의 독립된 컴퓨터가 어떠한 목적을 가지고 결합(연결)된 상태를 의미한다. 1971년 미국 국방선을 중심으로 미국의 대학들과 연구기관이 다수 컴퓨터와 단말장치를 디지털 회선으로 접속하여 임의의 컴퓨터에 원격 접속할 수 있는 ARPANET 탄생시킴. ARPANET 인터넷의 시초라고 볼 수 있고 인터넷의 기반기술인 패킷 교환(TCP/IP) 네트워크를 최초로 구현되고, 그 이후 1990년대 초에 ..
안녕하세요. minuco입니다. 진짜 마지막! closure 가 간결해지는 순서를 알아볼 거예요 내장 closure인 sort를 예로 들겠습니다! Closure를 간결하게 우선 arry를 하나 만들고 sort 함수를 호출하는 과정을 축약해 보겠습니다. (sort함수는 기본적으로 오름차순으로 정렬된다.) var names = ["abcd","bacd","cabd","dabc"] // 형태: sort(by: (String, String) throws -> Bool) //1. 기본 형태 names.sort(by: {(lhs: String, rhs: String) -> Bool in // lhs(left hand side)왼쪽, rhs(right hand side)오른쪽. return lhs > rhs }) /..
안녕하세요, minuco입니다. :) 마지막입니다. 우리가 지금까지 공부했던 Closure는 Non_Escapin Closure입니다. 즉, 함수에서 파라미터로 전달될 때 일반적으로 함수가 반환되기 전에 실행되는 Closure입니다. Non-Escaping Closure 일반적인 Closure func showString(completion: () -> Void) { completion() // 실행하고 종료 } showString { print("a") } // 일반적인 Closure는 호출은 Function 안에서 종료된다. 클로저가 실행되는 순서를 보면, closure가 showString() 함수의 completion 인자로 전달되고, 함수 내부에서 closure type completion이 실..
Closure - Capturting Value 우선, referunce type과 value type에 대해서 알아보자, referunce type class, function, closure 등이있고, 대표적으로는 class를 많이 이야기한다. class의 인스턴스를 생성할 때, 인스턴스를 가리키는 포인터가 생성되는데 이 포인터는 생성된 인스턴스여 주소를 참조하게 된다. (클로저에서 class 인스턴스에 대한 참조를 캡처하면 클로저의 내부의 인스턴스에 대한 모든 변경 사항이 클로저 외부의 원래 인스턴스에도 반영된다.) 이와달리 value type은 해당 값의 복사본을 생성하여 사용하는 데이터타입을 말한다. 대표적으로는 struct, enum, String, Array, Dictionary 등이 있다...
안녕하세요 :) minuco입니다. Closure 왜 사용할까?? 클로저를 사용하면, 코드 중복 & 가독성 향상! : 비슷한 기능의 코드를 하나로 묶어서 재사용할 수 있다. : 함수나 메서드의 인자로 전달하는 코드를 간결하게 작성할 수 있다.(경량 문법) : 비동기 처리에도 용이! Closure 종류 Named Closure(함수)와 UnNamed Closure(익명함수) Named Closure는 func이라는 키워드가 붙고 함수라 부르고, UnNamed Closure는 Closure라 부른다. //1. function (named closure) func plus(a: Int, b: Int) -> Int { return a + b } //2. closure (unnamed closure) { (a: ..
지도 객체를 생성하는 방법 NMFMapView 하나의 지도는 뷰 요소와 인터에이스 요소로 구성. 뷰 요소는 화면에 지도를 나타내는 역할을 함. NMFNaverMapView 지도를 다루응 인터페이스 역할을 하는 인터페이스 요소를 담당 지도와 관련된 주요 UI 기능을 담당하며 대부분 이 클래스가 제공한다. 지도 화면은 뷰로 제공되며, NMFMapView 혹은 NMFNaverMapView 를 뷰 컨트롤러에 추가하면 화면에 지도가 나타난다. NMFMapView import UIKit import NMapsMap override func viewDidLoad() { super.viewDidLoad() // 지도 객체 생성 let mapView = NMFMapView(frame: view.frame) // view..