⭐️ 개발/iOS & Swift
[Swift] Escaping Closure : 탈출 클로저란?
📚 탈출 클로저 Escaping Closure 스위프트에서는 함수의 파라미터로 전달된 클로저는 기본적으로 해당 함수 내부에서만 사용이 가능합니다 -> 이걸 탈출 불가 상태라고 하죠. 원래 클로저는 참조 타입이며 변수, 상수 등으로 저장, 전달 인자로 저장이 가능한 형태이지만 파라미터로 받은 클로저는 직접 실행만 가능하고, 외부 변수나 상수에 대입이 불가능한 형태입니다. 클로저가 파라미터로 넘어가게 되면 해당 함수가 끝나서 리턴되기 전에 클로저가 실행이 됩니다. 그리고 해당 함수가 실행 완료되면 클로저의 사용이 불가능하게 됩니다. 하나의 예시를 살펴볼까요? class ViewController: UIViewController { var sampleClosure : () -> Void = {} overrid..
[iOS] Alamofire를 통해 서버와 통신 해보기 - GET
솝트 4주차 세미나 복습 정리를 위한 글입니다. 다소 두서없는 글임이 예상되오니 그냥 봐주세오. [ Alamofire를 통해 서버와 통신 해보기 - GET ] 📚 데이터를 가져오는 GET 방식에서는 서버에서 일방적으로 데이터를 요청해서 받아오는 식입니다. 📚 이때 파일 별로 나눠서 단계 별로 생각해서 정리해보자면 1. NetworkResult.swift : 네트워크 결과를 나누기 위해서 enum 형으로 선언해줍니다. 2. XXXDataModel.swift : JSON 데이터를 담아내기 위해 데이터 구조체를 만들고 Codable 프로토콜을 채택합니다. 3. XXXXService.swift : 실질적인 네트워크를 처리해주는 부분으로 escaping closure를 통해서 결과값을 뷰컨에 전달합니다. 4. X..
[Swift] 싱글턴 패턴 : Singleton Pattern이란?
📚 싱글턴 패턴 Singleton Pattern 특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형입니다. 예를 들어서, 유저의 정보를 저장하는 클래스가 있다고 할 경우에 VC1, VC2, VC3에서 각각 id / pw / name을 따로 따로 가져온다고 하면 이런 식으로 가져오게 됩니다. 각각의 인스턴스에서 정보가 따로 따로 저장되고 VC1에서는 pw / name 정보가 nil VC2에서는 id / name 정보가 nil VC3에서는 id / pw 정보가 nil 인 상태가 됩니다. 그렇지만 우리는 한 인스턴스 안에서 모든 정보 (id / pw / name) 가 저장되는 걸 필요로 합니다. 이렇게 해주기 위해서는 해당 인스턴스를 최초 생성 시에 전역으로 저장해두고 그 이..
[iOS] 데이터 직접 전달 방식(3) - Delegation을 통해 전달
뷰를 전환하며 데이터를 전달하는 방식은 크게 2가지로 나뉩니다. 바로 직접 전달과 간접 전달이죠! ▶️ Segue prepare 메소드를 통해 전달하는 방식 ▶️ Property에 접근해서 전달하는 방식 그 중 Delegation을 통해 전달하는 방식은 직접 전달 방식에 해당합니다. 오늘은 요 Delegation을 통한 데이터 전달 방식을 공부해보려고 합니다. 그렇기 위해서는 Protocol과 Delegate 패턴에 대해 미리 공부를 해야 합니다. 📚 Protocol과 Delegate Pattern Delegate는 Protocol 형태로 구현되기 때문에 이 둘은 뗄래야 뗄 수 없는 관계래요! 그렇다면 프로토콜은 뭘까요? 한마디로 말하자면 메뉴얼/설명서 에요! 메뉴얼을 보면 어떻게 하라고..
[iOS] 데이터 직접 전달 방식(2) - Segue prepare 메소드를 통해 전달
뷰를 전환하며 데이터를 전달하는 방식은 크게 2가지로 나뉩니다. 바로 직접 전달과 간접 전달이죠! ▶️ Property에 접근해서 전달하는 방식 그 중 Segue prepare 메소드를 통해 전달하는 방식은 직접 전달 방식에 해당합니다. Segue prepare 메소드를 통해 전달하는 방식에 대해 공부를 해볼 겁니다! Segue가 뭘까요? 세그가 뭘까요?? 아래 사진의 화살표를 세그라고 불러요! 스토리보드에서 자주 봤죠? 맞아요 씬과 씬을 연결해주면서 자주 봤을 거에요! 세그는 스토리보드에서 뷰 컨트롤러에서 다른 뷰 컨트롤러로 화면 전환을 해주기 위해 코드를 사용하지 않고 구현해주기 위해 사용하는 도구에요. 세그웨이(Segueway)를 짧게 부른 말이죠. 세그를 통한 데이터 전달을 해주기 위해서 네비게이..
[iOS] 데이터 직접 전달 방식(1) - Property를 통해 전달
뷰를 전환하며 데이터를 전달하는 방식은 크게 2가지로 나뉩니다. 바로 직접 전달과 간접 전달이죠! ▶️ Segue prepare 메소드를 통해 전달하는 방식 그 중 Property에 접근하여 전달하는 방식은 직접 전달 방식에 해당합니다. 프로퍼티에 접근해서 전달하는 방식에 대해 공부를 해볼 겁니다! 우선, 프로퍼티란 무엇일까요? 스위프트에서 프로퍼티는 클래스, 구조체, 열거형과 연관되어 있는 정보/값을 의미합니다. 쉽게 예시를 들어보자면, 이렇게 Shinee라는 클래스 내에 [ fandom ] 이라는 문자열 변수와 [ member ] 라는 정수형 변수가 있는데요. 이 fandom과 member 변수를 우리는 Shinee 클래스의 프로퍼티라고 합니다. 어느정도 이해가 가시져? 어쨌든! 이 프로퍼티를 통해 ..
[Swift] 클래스(Class) /구조체(Struct) /열거형(Enum) 정리 + 차이점
📚 목차 1️⃣ 열거형 Enum 2️⃣ 구조체 Struct 3️⃣ 클래스 Class 4️⃣ 차이점 Swift는 객체지향 프로그래밍 언어입니다. 그렇기 때문에 우리는 클래스, 구조체, 열거형에서 각각의 타입을 가지는 인스턴스(=객체)를 생성해서 사용할 수 있습니다. -> 이 부분에서 많이들 붕어빵과 붕어빵틀로 인스턴스와 클래스를 설명하곤 하죠. 클래스, 구조체, 열거형의 인스턴스를 사용하기 위한 준비 작업을 이니셜라이저 즉, 초기화라고 합니다. 자,, 왜 여기에 이렇게 주저리 글을 적었냐... 그것은 제가 이해가 안갔기에 정리를 해봤습니다.. 자 본론으로 들어가 열거형, 클래스, 구조체가 뭔지 어떤 경우에 열거형/구조체/클래스를 쓰는지 등의 차이점도 정리해보겠습니다! 1️⃣ 열..
[iOS] UIPanGestureRecognizer 사용해서 모달화면 아래로 dismiss하기
UIPanGestureRecognizer를 사용해 모달창 아래로 스와이프해 dismiss하기 📚 UIPanGestureRecognizer는 UIGestureRecognizer의 하위클래스로 화면을 탭 후에 상하좌우로 Drag하는 제스쳐를 통해 화면에 변화를 줄 때 사용합니다. 이 클래스의 클라이언트는 액션 메소드를 통해서 현재 제스쳐의 변화(translation)와 속도의 변화(velocity)를 줄 수 있다고 합니다. UIPanGestureRecognizer is a concrete subclass of UIGestureRecognizer. Clients of this class can, in their action methods, query the UIP..
[iOS] velocity.y < 0 이면 왜 방향이 up일까?
UIPanGestureRecognizer 클래스를 쓰면서 이해가 안가는 것이 발생됐다;;; 바로 velocity라는 함수를 사용해서 나의 imageView가 어느 방향에 위치했는지 CGPoint 값으로 알려줄 때 왜..?!!!! velocity.y abs(velocity.y) { velocity.x < 0 ? print("..
[iOS] 스토리보드/코드로 화면 전환하기 - Navigation(push/pop)
📚 Navigation 창은 좌우로 화면이 전환되는 형태로, 모달뷰와 다르게 메뉴를 누르면 계속 하위 메뉴로 이어서 들어갈 수 있습니다. Navigation Controller는 화면을 나타내주는 뷰컨들을 Navigation stack에 쌓는 형식으로 관리하며 담아둘 수 있습니다. 여기서 가장 먼저 stack에 추가된 뷰컨이 Root View Controller 입니다. 아래에서부터 차곡차곡 쌓이는 형식이기 때문에 가장 위에 있는 뷰부터 pop이 됩니다. 🗳 목차 1️⃣ Storyboard로 Navigation 화면 전환하기 2️⃣ 코드로 Navigation 화면 전환하기 1️⃣ Storyboard로 Navigation 화면 전환하기 1. 우선 스토리보드에서 첫 번째 뷰컨을 선택 후 Embed In 메뉴..
[iOS] Storyboard Reference 쓰는 이유와 방법
네,, 저는 몰랐었습니다. 그동안 몰랐기에 이번에 알게 되어 이렇게 적어봅니다!! 심지어 세미나 때 배우고 3일 후에 과제를 진행했는데도 까먹어서 바로 적용을 못하길래 제 몽총한 머리에 지식을 집어넣기 위해 글을 써봅니다^^.. 🗳 목차 1️⃣ Storyboard Reference와 쓰는 이유 2️⃣ Storyboard Reference 쓰는 방법 1️⃣ Storyboard Reference와 쓰는 이유 Storyboard Reference는 이것들입니다. 이게 어디서 나왔냐면,, 요로코롬 탭바 컨트롤러의 각각 탭바 메뉴에 해당하는 뷰컨트롤러들인데요... 이걸 써주지 않으면 우리는 하나의 스토리보드 파일 안에 이렇게 많은 scene들을 갖게 돼요. (악 정신 사나워~~!!~!😖😖😖🤯) 뭐,, 혼자 프로젝..
[iOS] 스토리보드/코드로 화면 전환하기 - Modal(present/dismiss)
📚 Modal 창은 아래에서 위로 화면이 올라오는 형태로, 사용자가 해오던 작업과 다른 컨텐츠를 보여주고 싶을 때 사용하는 화면전환 방식이다. 🗳 목차 1️⃣ Storyboard로 모달 화면 전환하기 2️⃣ 코드로 모달 화면 전환하기 1️⃣ Storyboard로 모달 화면 전환하기 1. 우선 스토리보드에서 command+shift+L 을 눌러 object Library를 오픈해 uiViewController를 하나 가져옵니다. 그리고 헷갈리니까 뷰컨의 배경색을 바꿔줍니다. 2. 첫 번째 뷰컨에 button을 추가해줍니다. 누르면 다음 뷰컨으로 넘어갈 수 있게 말이죠. 3. button을 선택하고 contrl 키를 누른채 두 번째 뷰컨으로 drag를 하면 4. 이런 창이 뜹니다. 우리는 여기서 Presen..
[iOS] UITextField 입력 완료시 키보드 dismiss하기
textField에 타이핑 후 검색 버튼이나 키보드의 return 키를 누르면 키보드가 알아서 내려가게 하려면 어떻게 해야 할까? @IBAction func searchPressed(_ sender: UIButton) { searchTextField.endEditing(true) } func textFieldShouldReturn(_ textField: UITextField) -> Bool { searchTextField.endEditing(true) print(searchTextField.text!) return true } searchTextField.endEditing(true) 를 작성해주면 된다. 검색 버튼을 누르거나 키보드의 return 키를 눌렀을 경우에 텍스트 필드에게 작성이 완료되었다는 ..
[iOS] info.plist란? (그리고 하나하나 속성 정리)
Info.plist : 데이터를 구분하기 위한 key와 실제적인 데이터가 들어간 value로 이루어져있고 애플리케이션의 모든 기본 정보들이 담겨 있기에 중요하다.