본문 바로가기

전체 글

(426)
[iOS] SwiftUI CustomView SwiftUI로 커스텀 뷰 만들기 SwiftUI 뷰를 사용함과 동시에 커스텀 뷰를 만들어 자신이 원하는 UI 레이아웃을 어떻게 선언하는지 배워본다. SwiftUI 뷰 UI 레이아웃은 뷰 사용과 생성, 그리고 결합을 통해 SwiftUI로 구성된다. 뷰는 View 프로토콜을 따르는 구조체로 선언된다. 구조체가 View 프로토콜을 준수하기 위해서는 body 프로퍼티를 가지고 있어야 하며, body 프로퍼티 안에 뷰가 선언되어야 한다. SwiftUI에는 UI를 구축할 때 사용될 수 있는 다양한 뷰 (ex: TextLabel, TextField, Menu, Toggle...etc) 가 내장되어 있다. 해당 뷰들은 모두 View 프로토콜을 준수하는 독립적인 객체다. 기본 뷰 생성 SwiftUI 프로젝트를 생성하면 ..
[iOS] SwiftUI 개요 SwiftUI 개요 2019년 애플의 WWDC에서 처음 소개된 SwiftUI는 모든 애플 운영체제용 앱을 개발하는데 있어 완전히 새로운 패러다임을 제시하였다. SwiftUI의 기본적 목적은 앱 개발을 기존 방식보다 쉽고 효율적으로 함과 동시에 소프트웨어 개발시 발생하는 일반적인 버그들을 줄이는 것이다. SwiftUI의 수많은 장점은 선언적 구문 과 데이터 주도에서 비롯되며 이번 페이지에서 공부할 핵심적인 주제다. UIKit 그리고 Interface Builder 선언적 구문(Declarative Syntax) 에 대한 의미 그리고 장점을 이해하기 위해서는 UI 레이아웃이 SwiftUI 이전에는 어떠한 방식으로 설계되었는지 이해하는 것이 바람직하다. SwiftUI 도입 이전에는 iOS Software De..
[iOS] TableView UITableView 본 문서에서는 apple 에서 제공하는 UITableView 공식 문서에 기재되어 있는 메소드와 프로퍼티에 관하여 정리한다. Topics Creating a table View init(frame: CGRect, style: UITableView.style) : 주어진 특정 frame 크기와 style에 맞춰서 테이블뷰를 생성하여 반환한다. Providing the Table's Data and Cells var dataSource: UITableViewDataSource? : 테이블뷰의 데이터 소스 역할을 하는 객체다. var prefetchDataSource: UITableViewDataSource : 테이블뷰의 prefetch 데이터 소스 역할을 하는 객체, 사용할 셀 데이터의..
[iOS] ARC and Strong, Weak, Unowned RC RC란, Reference Counting 의 약자로 애플에서 메모리를 관리하는 방법이다. 메모리를 할당하거나, 메모리 포인터를 참조할 때, 레퍼런스 카운트를 증가시키고 사용을 완료하면 레퍼런트 카운트가 감소된다. 이러한 메모리 관리 기법이 기존에는 manual하게, 개발자에 의해 수동으로 진행되었다. 이후 이를 자동으로 관리해주는 기능이 iOS 4부터 제공되기 시작했으며 이를 ARC(Automatic Reference Counting)이라고 한다. ARC 참고로 애플리케이션은 Compile -> Linking -> Runtime 이렇게 3 단계를 거쳐서 빌드되고 만들어진다. 스위프트 공식 문서에 의하면 "Swift는 ARC를 사용하니 메모리 관리를 생각할 필요가 없다." 라고 한다. 하지만, 메모..
[iOS] Core Data Core Data iOS 앱을 개발할 때 내부에 데이터를 저장하여 활용하는 방법 중 오픈 소스를 활용하지 않는 방법은 대표적으로 2가지가 있다. UserDefault 와 CoreData 가 존재한다. 하지만 두 기능은 목적이 다르며 쓰임새도 당연히 다르다. UserDefault 는 이름 그대로 사용자의 기본적인 설정값, 상대적으로 가볍고 복잡하지 않은 데이터를 저장하기 위한 기능이고 CoreData 는 UserDefault 보다는 더 복잡하고 무거운 데이터를 처리하기에 적합하다. OverView 코어 데이터를 사용하여 오프라인 사용을 위해 애플리케이션의 영구 데이터를 저장하고 임시 데이터를 캐시한다. 코어 데이터의 Data Model Editor를 통하여 우리는 데이터의 타입과 관게를 지정할 수 있다. ..
[iOS] Storyboard vs Code-based UI & DispatchQueue UI 업데이트를 반드시 mainQueue 에서 진행해야 하는 이유 Cocoa Touch 앱에서 UIApplication의 인스턴스 가 메인 스레드에서 작동하기 때문이다. UIApplication 은 앱을 시작할 때 인스턴스화 되는 앱의 첫번째 부분이다. 앱의 main event loop는 touch, gesture 등의 모든 UI event를 수신한다. 즉, UI 와 관련된 모든 event가 main thread에 attach 하기 때문에, 반드시 main에서 해야하는 것이다. 스토리보드 vs 코드 기반 UI의 차이 애플은 스토리보드 사용을 권장한다. 아마 미래에는 스토리보드 기반의 UI작성이 표준이 될 것으로 예상된다. 그러나 스토리보드를 사용하여 UI 작업을 진행하는 것은 몇몇 단점이 존재한다. 각각..
[iOS] Codable and JSON Encoder & Decoder Codable 그리고 JSON Encoder & Decoder Codable typealias Codable = Decodable & Encodable 인코딩 : 정보의 형태 또는 형식을 다른 형태, 형식으로 변환하는 처리 방식 디코딩 : 인코딩의 반대 작업 Codable은 스위프트의 인스턴스를 다른 데이터 형태로 변환하고 그 반대의 역할을 수행하는 방법을 제공해준다. 스위프트의 인스턴스를 다른 데이터 형태로 변환하는 것을 Encodable 프로토콜에 표현하였고, 그 반대로 다른 데이터 형태를 스위프트 인스턴스로 변환하는 것을 Decodable로 표현하였다. Example Coordinate 타입과 Landmark 타입의 인스턴스를 다른 데이터 형식으로 변환(인코딩)하고 싶은 경우, Codable 프로토..
[iOS] Searchable TableView Searchable TableView 이번에는 지난 시간에 진행했던 테이블 뷰에서 한 가지 개념을 응용해보고자 한다. 검색창을 추가하여 검색 쿼리에 따라 적절한 데이터를 출력해주는 테이블 뷰를 만들어보자. 예제 코드는 아래와 같다. import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { @IBOutlet var table: UITableView! @IBOutlet var field: UITextField! // 기존 데이터 var data = [String]() // 쿼리 결과에 따른 데이터 var filteredData = [String]() //..