iOS 공부를 방학동안 시작해보고 싶어서 Udemy에서 강의를 수강하게 되었다.강의명은 iOS & Swift - The Complete iOS App Development Bootcamp이다. 정가 15만원(?) 정도인 수업인데 할인 기간이라 대략 15000원 정도에
Xcode 와 좀 더 친해지게 되었고, swift 기본 문법을 조금 배웠다. 이전에 파이썬을 한 학기 동안 배운 적이 있는데, 조금해서 그런지 기본 문법을 익히는 데에 크게 어려운 것 같지는 않다.우선 주요 강의는 이정도(?) 들은 것 같다. 밑에 Code Exerci
Open Terminalcd to project directorypod init (terminal / creates a Podfile)open Podfilewrite: pod 'RealmSwift' right before "end"savepod install (ter
친구와 간단한 Todo 앱을 만들기로 했다. 친구는 백엔드를 맡고, 나는 전반적인 iOS 개발을 맡기로 했는데, 내가 완전 초짜다 보니까 모든 것을 유튜브를 보면서 진행해야 했다. Todo 앱을 만들고 싶으면 DB와 통신이 되어야하고, 각종 정보 (ex. 할일, des
JavaScript Object Notation→ an open-standard file format or data interchange format that uses human-readable text to transmit data objects.→ 데이터 덩어리로
오늘은 iOS Auto Layout 에 대해 배웠다. 애플은 다양한 디스플레이 사이즈를 가진 기종을 출시하기 때문에, 앱 개발을 할 때 Auto Layout 설정이 매우 중요하다. 내가 아이폰 12를 쓴다고 이 기종에만 맞춰서 User Interface 를 개발하면,
스위프트의 기본 데이터 타입이 모두 구조체 를 기반으로 구현되어 있음.Bool, Int, UInt, Float, Double, Character, String→ Swift 의 모든 데이터 타입 이름은 첫 글자가 대문자로 시작하는 대문자 카멜케이스 를 사용Any, Any
이미 존재하는 데이터 타입에 임의로 다른 이름(별칭) 부여 가능→ Int 와 MyInt 모두 같은 타입으로 취급지정된 데이터의 묶음튜플 요소 이름 지정 역시 가능→ 이런 식으로 이름을 따로따로 모두 지정을 해주면 나중에 access 가능Array → 순서가 있는 리스트
A...B → A와 B 포함A..<B → A부터 B미만까지A... → A 이상의 수...A → A 이하의 수..< A → A 미만의 수if 구문 관련 : 스위프트에서는 if 구문은 조건의 값이 꼭 Bool 타입\*\*이어야 함→ C언어처럼 0, 1 안 되나
재정의 (오버라이드)와 중복 정의 (오버로드) 모두 지원\*\* return 키워드 생략 역시 가능→ When? : 함수 내부의 코드가 단 한 줄의 표현이고, 그 표현의 return 값이 반환 타입과 일치할 때 가능\*\* 함수의 매개변수가 여러 개 있을 때 : 함수
안전성을 문법으로 담보하는 기능값이 있을 수도, 없을 수도 있음을 나타내는 표현→ 변수/상수 등에 꼭 값이 있다는 것을 보장할 수 없다. 값이 nil일 수도 있다.옵셔널과 옵셔널이 아닌 값은 철저히 다른 타입으로 인식하기 때문에 컴파일 오류 방지 가능\*\* 옵셔널 변
오늘은 위와 같은 간단한 Xylophone 을 만들어보았다. 어떤 키를 누르냐에 따라 다른 소리를 내야하기에, 함수와 data passing 을 적절히 사용하는 법을 배웠다.우선 소리를 재생하기 위해서는 AVAudioPlayer 라는 것을 사용해야 한다.AVAudioP
구조체의 인스턴스 → 값 타입클래스의 인스턴스 → 참조 타입→ 인스턴스 생성 후 프로퍼티 값에 접근하기 위해서는 마침표 (.) 사용let, var 모두 사용 가능상속을 받을 때에는 클래스 이름 뒤에 콜론 ( : ) 을 써주고 부모클래스 이름 명시인스턴스 생성 후 초기화
→ 프로퍼티 : 클래스, 구조체, 열거형 등에 관련된 값을 뜻함→ 메서드 : 특정 타입에 관련된 함수저장 프로퍼티 (Stored Properties)→ 인스턴스의 변수/상수연산 프로퍼티 (Computed Properties)→ 특정 연산을 실행한 결과값타입 프로퍼티 (
Initializer 를 정의하면 초기화 과정을 직접 구현 가능Initializer → 새로운 인스턴스를 생성할 수 있는 특별한 MethodSwift 에서 Initializer 는 반환값 X → 이니셜라이저의 역할은 그저 인스턴스의 첫 사용을 위해 초기화하는 것func
은닉화파일 간, 또는 모듈 간 접근을 제한할 수 있는 기능모듈(Module) → 배초할 코드의 묶음 단위 ex) 하나의 Framework, Library, Application 등 ... import 키워드를 통해 불러오는 것접근제어는 접근수준 키워드를 통해 구현 가
오늘은 위와 같은 달걀 타이머를 만드는 법을 살짝 배웠다. Soft, Medium, Hard 에 따라 달걀을 삶는 시간이 다르니, 각각을 눌렀을 때 다른 타이머가 동작한다. 그리고 타이머가 1초씩 진행되면서 아래의 Progress Bar 도 변할수 있도록 코딩해줘야 한
오늘은 iOS App Design Pattern Challenge 실습을 진행하였다. 이전에 배운 MVC (Model View Controller)라는 디자인 패턴을 나름 적용해보는 실습이었는데, 많은 도움이 된 것 같아 복습하고자 글을 쓴다.우선 MVC 는 디자인 패
Closure스위프트는 Closure, Generics, Protocol, Monad 등이 결합되어 강력한 언어가 됨람다 (Lambda) 와 유사→ 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 말한다→ 그러니까 하나의 코드 블럭이라 보면 됨→ 함수는 클로저의
→ 옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메서드 등을 가져오거나 호출할 때 상요할 수 있는 과정nil이 반환될 가능성이 있으므로 옵셔널 체이닝의 반환된 값은 항상 옵셔널→ 꼬리에 꼬리를 무는 형식→ 옵셔널 체이닝을 통해 한 단계뿐만 아니라 여러 단계로 복잡
Force UnwrappingCheck for nil valueOptional BindingNil Coalescing OperatorOptional Chaining→ But we need to be careful when using force unwrapping. →
Holds functions and variables, but it only hold their definitions, not their body.Variables are just the name, type of it. And if it's a get or a set.
매개변수로 함수를 갖는 함수를 고차함수라고 부르는데, 스위프트의 대표적인 고차함수로 맵, 필터, 리듀스가 있다. → 데이터의 연산을 쉽게 실행하게 해준다. 자신을 호출할 때 매개변수로 전달된 함수를 실행하여 그 결과를 다시 반환해주는 함수배열, 딕셔너리, 세트, 옵셔
Application Programming Interface (API) → A set of commands, functions, protocols, and objects that programmers can use to create SW or interact with
오늘은 위와 같은 BMI Calculator 를 만드는 실습을 진행하였다. 화면 전환 간 Data Passing 이 어떻게 이루어지는지, UISlider 를 어떻게 이용하는지, 그리고 이걸 모두 MVC 디자인 패턴을 적용해 보았다. 우선 스토리보드 인터페이스는 위와 같
Subscript클래스, 구조체, 열거형에는 컬렉션, 리스트, 시퀀스 등 타입의 요소에 접근하는 단축 문법인 서브스크립트 정의 가능즉 이런 개별 요소에 접근할 수 있는 지름길을 제공하는 것인덱스를 통해 값 설정 및 가져오기 가능someArrayindex, someDic
기반 클래스 (Base Class) → 다른 클래스로부터 상속을 받지 않은 클래스어떤 클래스의 자식클래스가 다른 클래스의 부모클래스가 될 수 있음자식클래스에서 자신만의 기능으로 변경하여 사용하는 것 → Override재정의를 하는데도 여전히 부모클래스의 특성을 활용하고
스위프트는 Implicit Type Conversion 을 지원하지 않음 → Type safe 언어→ 스위프트의 타입캐스팅은 인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인양 행세할 수 있는 방법으로 사용 가능is, as 연산자로 구현 → 이 두 연산자로
Anonymous functionsHow to write a closure? → The usual way we would define a function (top)→ How to write a closure : remove the keyword func and
프로토콜(Protocol)은 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한다.구조체, 클래스 등에서 프로토콜을 '채택'해서 프로토콜의 요구사항 구현 가능 → 프로토콜을 준수하는가? Conform\*\* 프로토콜을 준수하려면 제시하는 모
구조체, 열거형, 클래스, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능익스텐션이 타입에 추가할 수 있는 기능은 다음과 같다:연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티타입 메서드 / 인스턴스 메서드이니셜라이저서브스크립트중첩 타입특정 프로토콜을 준수할 수 있도록
Extensions add new functionality to an existing class, structure, enumeration, or protocol type. Extensions in Swift can:Add computed instance propert
It's super important to know when you want two views to communicate with each other (1:1)Example app → left: base screen, right: selection screen / Wh
Generic재사용성 up, 코드의 중복을 줄일 수 있음Generic 을 사용하고자 할 때는 제네릭이 필요한 타입/메서드의 이름 뒤의 < > 사이에 제네릭을 위한 타입 매개변수를 써주어 제네릭을 사용할 것임을 표시ex. 두 Int 타입의 변수값을 교환하는 함수→
스위프트 표준라이브러리에서 타입과 관련된 것을 보면 대부분 구조체로 구현되어 있음.보통 클래스, 상속 등을 활용하지 않음상속도 되지 않는 구조체로 어떻게 공통 기능, 다양한 기능을 구현 가능한가? → 프로토콜, 익스텐션 등을 활용했기 때문출처 :( https
타입 내부에 타입을 정의하고 구현할 때 사용타입 내부에 새로운 타입을 선언해주는 것 = 중첩 타입 (Nested Types)→ 중첩 데이터 타입을 사용할 때는 자신을 둘러싼 타입의 이름을 자신보다 앞에 적어줘야 한다!ex. Person.Job그냥 Job 로는 접근 불가
Automatic Reference Counting참조 타입 → 메모리 해제는 중요한 문제 → 인스턴스가 적절한 시점에 메모리에서 해제되지 않으면 메모리 자원 낭비 → 성능 저하스위프트는 메모리 사용을 관리하기 위해 메모리 관리 기법인 ARC를 사용Reference
특정 패턴과 결합하여 조건을 추가하는 역할을 한다조건 추가 or 특정 타입 제한할 때 사용→ 특정 패턴에 Bool 타입 조건을 지정하거나 어떤 타입의 특정 프로토콜 준수 조건을 추가하는 등의 기능타입캐스팅 패턴과 where 절의 활용프로토콜 익스텐션에 where 절을
대부분의 패턴은 switch, if, guard, for 등의 키워드로 이용하여 표현스위프트에서는 크게 2가지 패턴:값을 추출하거나 무시하는 패턴→ 와일드카드 패턴, 식별자 패턴, 값 바인딩 패턴, 튜플 패턴패턴 매칭을 위한 패턴→ 열거형 케이스 패턴, 옵셔널 패턴,
이번에 실습한 내용은 MVC 디자인 패턴, API 통신, 그리고 JSON Parsing 을 이용한 간단 날씨 앱 구현이다. 이때까지 배운 MVC 디자인 패턴을 실제 적용해보고, OpenWeather 라는 사이트의 API 를 이용해 실시간 날씨 정보를 불러오는 것과, 불
각 국가 환율별 비트코인 1개당 시세를 알려주는 앱을 만들어 보았다. 이때까지 적용해 본 MVC 디자인 패턴, API 통신, Delegate Design Pattern, 그리고 JSON 파싱을 종합적으로 적용을 해야 하는 앱이라서 조금 복잡한 감이 없지 않아 있었다.어
There are many ways to connect a segue between view controllers.Like the picture above, you can click a button on your view controller and drag it to
Navigate to the directory where your project is.ex.Optional: type in "ls" in terminal to see what files are in the currenty directory2\. type in pod i
Error Handling → 프로그램이 오류를 일으켰을 때 이것을 감지하고 회복시키는 일련의 과정스위프트에서의 오류는 Error 라는 프로토콜을 준수하는 타입의 값을 통해 표현오류를 표현하기 위한 타입 ( 주로 열거형) 은 이 프로토콜을 채택한다ex. 자판기 오류의
Sign in to Google and press "Go to console"Create a new project and give it a nameAdd an iOS app to your projectGive it an iOS bundle ID→ Your bundle
As the size of our app gets bigger and bigger, the number of times we use Strings to specify several tasks also increasesex. → "RegisterToChat" & "Log
Add a Table View first and then add a Table View Cell on top of itThis will create a Prototype cell that will be reused a bunch of times.It's importan
MVC 디자인 패턴은 앱의 객체를 모델, 뷰, 컨트롤러의 3 가지 역할 중 하나의 역할로 할당한다.객체가 수행하는 역할 + 서로 통신하는 방식을 정의앱과 관련된 Data 를 캡슐화하고, 해당 데이터를 조작하고 처리하는 로직과 계산을 정의한다.하나의 모델 객체는 다른 모
Take a loot at the Firebase documentation. Authentication → iOS → Password Authentication→ This section will give detailed steps on how to authenticat
Take a look at the Firebase Documents as well.See what code you can usePut the above code in the place you need the user to be logged in
Add a BarButtonItem in the View Controller where you want the user to Log outGo check the Firebase Documents and see what code needs to be implemented
→ 위와 같은 drill-down interface 각 선택할 수 있는 항목에 대한 세부항목이 존재하는 인터페이스\---View Controller 를 담을 수 있는 배열과 같다고 생각스택의 가장 하위에 있는 View Controller 가 Root View Contr
Hierarchical NavigationMake one choice per screen until you reach a destination. To go to another destination, you must retrace your steps(pop) or sta
싱글턴은 '특정 클래스의 인스턴스가 오직 하나임을 보장하는 객체'를 의미싱글턴은 애플리케이션이 요청한 횟수와는 관계없이 이미 생성된 같은 인스턴스를 반환→ 싱글턴 디자인 패턴은 애플리케이션 내의 특정 클래스의 인스턴스가 하나만 존재하기 때문에 객체가 불필요하게 여러 개
Delegate Design Pattern과 마찬가지로 iOS 환경에서 많이 사용되는 디자인 패턴 중 하나이 디자인 패턴에서 객체는 이벤트가 발생할 때 다른 객체에 메시지를 보내는 데 필요한 정보를 포함 → Target = 액션이 호출될 객체를 의미 (보통 Contr
스택뷰는 여러 뷰들의 수평 또는 수직 방향의 선형적인 레이아웃의 인터페이스를 사용할 수 있도록 해준다.스택뷰와 오토레이아웃 기능을 활용하여 디바이스의 방향과 화면크기에 따라 동적으로 적응할 수 있는 사용자 인터페이스를 만들 수 있음ex. Horizontal Axis S
사용자의 이목을 끌기 위해 사용하는 화면 전환 기법엄밀히 말하면 화면 "전환"은 아니고, 다른 화면을 현재 화면 위로 present 하여 표현하는 방식 (present modally)Modal 로 보이는 화면을 사라지게 하려면 특정 "선택"이 동반되어야 한다. → 메
제스처 인식기 → 제스처 관련 이벤트를 다룸특정 제스처 이벤트가 일어날 때 마다 각 타깃에 맞는 액션 메시지를 보내어 제스처 관련 이벤트를 처리할 수 있다.UIGestureRecognizer Class→ 위 클래스는 특정 제스처 인식기에 대한 동작을 정의한다UIGest
UIDatePicker 예시→ 기본적으로 여러 Attributes 를 제공한다. Date Picker 에 Action method 연결하기Date picker는 사용자가 선택된 날짜를 바꿀 경우 애플리케이션에 알리기 위해 타깃 액션 디자인 패턴을 사용Date picke
Add a new file in the Views folderAdd a CocoaToach file. For a tableview cell, it must be the subclass of "UITableViewCell"When file is added, two new
→ The above code is not really "Type casting". The type conversion that is happening above is achieved through " initialization "Checks if a certain o
We are going to use Cloud Firestore (There is Cloud Firestore & Realtime Databse) Head to your project console, and "create database" Start in te
viewWillAppearCalled when content view created in memoryWhat is content view?→ When you create a new view controller (cocoatoach class) in your storyb
iOS 애플리케이션에서 정보를 " 리스트 형태 " 로 보여주기 위해 사용되는 사용자 인터페이스→ 아이폰 설정 앱, 카카오톡, 등 대부분의 앱이 테이블뷰를 포함하고 있음테이블뷰는 하나의 열(column)과 여러 줄의 행(row)을 지니며, 수직으로만 스크롤 가능각 행은
UITableView 객체는 데이터 소스와 델리게이트가 없다면 정상적으로 동작하기 어려우므로 두 객체가 꼭 필요DataSource → 데이터 모델 (MVC 의 M(Delegate → 테이블뷰의 모양과 동작을 관리하기에 컨트롤러 (MVC 의 C) 와 가깝다.TableV
정적 데이터와 동적 데이터를 활용해서 UITableView 실습을 진행해 보았다. 첫 번째와 두 번째 Section 은 한글 (가나다라..)과 영어 (ABCD..) 배열을 정적으로 보여주고, 마지막 Section 에서는 Add Button 을 누르면 새롭게 Custom
세그는 스토리보드에서 VC 사이의 화면전환을 위해 사용되는 객체다.별도의 코드 작성 없이 Storyboard 에서 세그를 연결하여 화면 전환 구현이 가능 → 필요에 따라 UIViewController 의 performSegue(withIdentifier: sender
인코딩(Encoding) 은 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식을 뜻한다.디코딩(Decoding) 은 인코딩의 반대 작업을 수행하는 것을 뜻한다.스위프트 4 버전에서
→ Take a look at the Firebase documents. There is a section about "Read Data"→ Since the name of our collection is "messages" our code to retrieve dat
In order to retrieve data from Firestore, you would initially have to repeatedly call the below function (closure)→ But instead, there is a way to get
In a chat application, we would have to sort the messages data by time, meaning we would have to add a time stamp to the documents stored in Firestore
< CocoaPod , Swift Package Manager 모두 호환 >기능 설명: 별도 코드 구현 없이 TextField 를 누르면 알아서 View 가 통째로 올라갈 수 있도록 도와주는 Library.별도 코드 구현 없이 화면 아무 곳이나 누르면 dismis
부스트코스 iOS 앱 프로그래밍 간단 날씨 앱MVC Design Pattern 적용Hard-Coding 하는 부분을 최소화WeatherTodayGIF
사진 및 비디오에 직접 접근하기 위한 Photos 프레임워크이 Framework를 사용하여 화면에 표시 및 재생할 Asset 를 검색하고 이미지 또는 비디오를 편집하거나 앨범, 특별한 순간 및 iCloud 공유 앨범과 같은 Asset 를 사용하여 작업할 수 있음.Ass
프로세서 (Processor)컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛CPU 가 이에 속함여러 개의 프로세서 = Multi-processor코어 (Core)프로세서에서 코어는 주요 연산회로싱글코어는 말 그대로 하나의 연산회로가 내장되어있는 것이고 듀얼코어는 두 개
연산(Operation)의 실행을 관리하고 대기열의 동작관리를 하는 Operation Queue스위프트에서 Queue 를 볼 때마다 Main Queue Operation (ex. UI updates) 인지, 아니면 Background Queue Operation (ex
이미지를 다운 받는 작업은 Main Thread 가 아닌 다른 별도의 Thread 에서 이루어지고 있고, 다운을 다 받은 후에는 해당 이미지를 ImageView에 세팅하는 작업은 Main Thread 에서 이루어지고 있다.이미지를 다운 받는 작업은 Main Thread
Just like we humans are born and we eventually die, so do ViewControllers. ViewControllers have a lifecycle with certain key moments that we can tap i
The step " Resources Reclaimed " is actually a key to understanding how iOS works. → Resources like CPU time or memory are limited, and the OS always
Navigation Item → Navigation Bar 의 콘텐츠를 표시하는 "객체"다. View Controller 가 전환될 때마다 Navigation Bar 는 하나의 " 공동 객체 " 지만, Navigation Item 은 각각의 View Controller
CollectionView 란 Grid, Stack, Tile, 그리고 원형 배열을 포함하여 다양한 유연성을 제공하는 Interface.CollectionView는 유연하고 변경 가능한 Layout 을 사용하여 데이터 아이템의 정렬된 세트를 표시하는 수단.가장 일반적인
Terminal (macOS) is a way of accessing something called the Bash Shell.What is the Bash Shell?We first need to know what a shell is.Think about your O
올리지 말아야 하거나, 숨기고 싶은 파일은 Git ignore 파일에 포함시켜야 한다. → ex. API key 예를 들면 위와 같이 secrets.txt 파일이 절대 깃허브에 올리면 안 되는 파일이라고 치자.아니면 .DS_Store 같은 별 쓸모 없는 파일도 안
프로젝트 디렉토리로 이동해서, "git branch 브랜치 이름" 을 치면 된다.git branch 라고 치면 어떤 branch 들이 존재하는지 한 번에 확인할 수 있다.좌측의 아스트릭 (\*) 표시는 "현재" 브랜치가 어디인지 알려준다."git checkout 브랜치
부스트코스-iOS 앱 프로그래밍 프로젝트D-내 사진 관리 어플리케이션(My Album)MVC Design Pattern 적용Apple PhotoKit Framework 사용PHAsset, PHAssetCollection, PHFetchResult, PHImageMana
평소 Version Control 을 위해서는 GitKraken 을 쓴다. CLI 기반은 어렵고 직관적이지 않아 GUI 기반인 GitKraken 을 쓰면 그나마 덜 어려워서 애용한다. 하지만 이번에 Xcode 내에서도 Source Control 이 가능하다는 것을 깨달
멀티코어와 멀티프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 GCD 기술 → 프로그래머가 실행할 테스크 (작업)을 생성하고 Dispatch Queue 에 추가하면, GCD 는 테스크 (작업)에 맞는 Thread 를 자동으로 생성해서 실행하고 작업
작업 항목의 실행을 관리하는 클래스Queue 에 추가된 작업항목은 시스템이 관리하는 Thread Pool 에서 처리하고 작업을 완료하면 Thread 를 알아서 해제한다언제 주로 사용?→ 서버에서 데이터를 내려받는다든지, 이미지, 동영상 등 멀티미디어 처리와 같이 CPU
사용자에게 경고 또는 알림 메시지를 표시하기 위해 Alert or ActionSheet 를 사용함TitleMessageAction→ 이 3개로 구성되어 있음사용자에게 표시할 Alert 또는 Action Sheet 의 구성에 관한 메서드와 프로퍼티를 포함하고 있음.구성
It's a good idea to keep a Constants.swift file to store the key stringsYour app would crash if the String is wrongYou should only really be using Use
First and foremost, the "Use Core Data" checkbox must be checked.After creating the project, you notice one different file. Inside here is where we se
( ToDo App example )We first have to modify the following code:First of all, we have to tap into the context variable from the AppDelegate.swift. But
→ The above code allows you to easily locate where your SQLite file is.Locate the SQLite file and then open it with an SQLite app.We can see that ther
How can we load up items from our system container?ex. Entire codecontext.fetch(request) → Since we cannot directly fetch data from the Persistent Con
Deleting Data from Core Data (Delete in CRUD) The order which we delete and remove matters a huge deal. We first need to delete what we want to delet
In the AppDelegate.swift file, don't forget to import RealmSwift and initialize it.→ Use the above code to figure out where your Realm file is. CMD +
First, setup the necessary Data files in your project directory.The class you set up must be a subclass of "Object", which is a class used to define R
→ Unlike Core Data, fetching Realm objects is really simple, because it only requires 1 line. If you want to fetch a Category type object, just specif
Updating in Realm is very similar to creating a new item.→ We first have to unwrap the Results container and see if it is not nil.realm.delete ( objec
이쁜 UI를 가진 초간단 투두앱!Realm 을 이용하여 사용자 입력 데이터를 기기에 보존MVC 디자인 패턴 적용Realm 을 이용한 로컬 데이터 저장 방법Realm 에 저장된 다양한 객체들 사이의 관계를 설정하는 법 (1:1 데이터, 1:다 데이터)보존된 데이터 검색하
간단하고 깔끔한 계산기 모음 앱 (무려 6종)!일반 계산기단위 계산기금 시세 계산기 (재미로 넣어봄)할인 계산기환율 계산기학점 계산기iOS & Swift 공부를 시작한지 한 달째 되던 무렵, 간단한거 뭐라도 좀 만들어봐야 실력이 늘 것 같았다. 스위프트 문법 책을 아무
앱 개발을 하다가 사용자 앨범에서 사진을 여러 장 받는 그런 기능을 구현해야 했다. 그러나 어떻게 구현하나 알아보고 있는데, 애플에서 기본으로 제공하는 ImagePickerController는 한 번에 여러 장을 고를 수 없게 되어 있다고 한다. 즉, 프로필 이미지 사
앱 프로젝트를 진행하면서 API 통신을 할 일이 정말 많다. 아니, API 통신을 안 하는 부분이 거의 없는 것 같다. 백엔드 담당하시는 팀원이 API 설계를 하시고, Swagger 를 통해 테스트를 할 수 있게 만드셨는데, 처음보는 Content-Type 가 있었다.
현재 만들고 있는 앱에 Review Table View Cell 을 만들어야 한다. 사용자들이 맛집을 리뷰할 수 있게 하고, 등록된 리뷰들을 UITableView에 담아 보여줄 예정이다. 만들고자 하는 Review Cell은 아래와 같은 디자인이다.그런데 사용자가 리뷰
ARC에 대한 개념을 다시 확실하게 잡고 싶어 공식 문서를 보고 정리한 내용을 공유한다.공식문서 링크 : https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.htmlSwift는
Swift 에서는 strong reference cycle를 해결하기 위해서 2가지 방법을 제공한다.weak referenceunowned reference✻ 둘 다 reference cycle에서 하나의 인스턴스가 다른 인스턴스를 “강하게" 참조하지 않게 도와주는 키
이런 문제를 해결하기 위해서 클로저 내에서 “capture list”를 정의한다.capture list는 클로저 바디 내에서 다른 reference type (i.e class) 에 접근할 때 어떤 규칙을 가지고 접근할지 정의하는 것이다. 클로저 내에서 self를 캡쳐