전체 글

공부하거나 삽질한 내용을 정리하는 블로그입니다.
· iOS
REST API 통신을 간편하게 하도록 지원해주는 라이브러리인 Alamofire를 사용해보기 위해 라이브러리를 설치해보았다. 1. 먼저 코코아팟(CocoaPods)을 설치해준다. 코코아팟이란 스위프트 프로젝트의 종속성 관리자이다. sudo gem install cocoapods 2. 터미널 창에서 프로젝트 폴더로 이동해준 뒤 pod을 적용해준다. pod init ※ 만약 pod 적용 중 FrozenError 발생 시에는 다음과 같이 루비 업데이트를 해준다. sudo gem update xcodeproj 잘 적용이 되었다면 아래와 같이 프로젝트 폴더에 Podfile 파일이 생성될 것이다. 3. 생성된 Podfile 파일에 아래 내용을 추가해준다. pod 'Alamofire', '~> 5.5' 4. 라이브러..
· Swift
익스텐션(Extension)은 스위프트의 강력한 기능 중 하나로, 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다. 익스텐션으로 추가할 수 있는 기능은 다음과 같다. (기존에 존재하는 기능의 재정의는 불가) 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 익스텐션 정의 문법 extension 확장할 타입 이름 { 타입에 추가될 새로운 기능 구현 } 또한 익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도..
· Swift
프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)함으로써 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 '프로토콜을 준수한다(Conform)'고 표현한다. 프로토콜의 요구사항을 충족시키기 위해서는 프로토콜이 제시하는 기능을 모두 구현해주어야 한다. 즉, 프로토콜은 정의와 제시만 할 뿐이지 스스로 기능을 구현하지는 않는다. 특정 타입의 인스턴스를 만들어서 사용하려는 사람 입장에서는 프로토콜을 통해 해당 타입이 수행할 수 있는 기능들에 대해 명확하게 알 수 있고, 컴파일러 또한 이를 쉽게 파악할 수 있도록 해준다...
· Swift
assert와 guard 애플리케이션이 동작 중에 생성하는 다양한 결과값을 동적으로 확인하고, 빠르고 안전하게 처리할 수 있도록 해준다. /* Assertion */ var someInt: Int = 0 assert(someInt == 0, "someInt != 0") // 조건이 맞기 때문에 지나침 someInt = 1 //assert(someInt == 0) // 동작 중지, 검증 실패 //assert(someInt == 0, "someInt != 0") // 메세지 지정한 경우 func functionWithAssert(age: Int?) { assert(age != nil, "age == nil") assert((age! >= 0) && (age! = 0 else { // 기술한 조건과 맞지 않으..
· Swift
스위프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 클래스의 인스턴스를 부모/자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도 로 사용된다. 키워드로는 is, as 를 사용한다. 기존의 다른 언어들에서는 다음과 같은 식으로 타입캐스팅을 해준다. let someInt: Int = 100 let someDouble: Double = Double(someInt) 하지만 스위프트에서 이렇게 하는 것은 타입캐스팅이 아니고, 그냥 인스턴스를 하나 더 생성하게 되는 것이다. 실습 코드 /* -------------------- 타입캐스팅을 위한 클래스 정의 -------------------- */ class Person { var name: String = "" func breath() { print("숨..
· Swift
[ 옵셔널 체이닝 ] 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또다시 옵셔널이 연속적으로 연결되는 경우 연쇄적으로 프로퍼티를 불러올 수 있도록 해 준다. 아래와 같이 사람과 아파트를 의미하는 2개의 클래스를 정의하고, 2명의 사람과 1개의 아파트 인스턴스를 생성해주었다. class Person { var name: String var job: String? var home: Apartment? // 집 (옵셔널) init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String var `guard`: Person? // 경비원 (옵셔널) var owner: Person?..
· Swift
스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. 따라서 저장 프로퍼티를 정의할때는 무조건 기본값을 할당해주어야 한다. 기본값 할당된 인스턴스 생성 이후, 프로퍼티 값 할당해주는 경우 class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick" } let jason: PersonA = PersonA() jason.name = "jason" jason.age = 30 jason.nickName = "j" 하지만 위와 같이 기본값이 정해져있으면, 무조건 기본값으로 기본값 초기화를 한 번 거친 다음 프로퍼티를 할당해주어야 하..
· Swift
프로퍼티는 크게 다음과 같이 종류를 나눠줄 수 있다. 저장 프로퍼티 (stored property) 연산 프로퍼티 (computed property) 타입 프로퍼티 (type property) 프로퍼티 예시 코드 // 프로퍼티 struct Student { // 인스턴스 저장 프로퍼티 var name: String = "" var `class`: String = "Swift" var koreanAge: Int = 0 // 인스턴스 연산 프로퍼티 var westernAge: Int { get { // 값 꺼내오기 return koreanAge - 1 } set(inputValue) { // 값 저장 koreanAge = inputValue + 1 } } // 타입 저장 프로퍼티 static var type..
· iOS
뷰 컨트롤러 사이에 값을 주고받는 방식은 2가지 개념으로 나누어진다. 직접 전달 방식 (동기 방식) 간접 전달 방식 (비동기 방식) 직접 전달 방식 (동기 방식) 뷰 컨트롤러 --> 뷰 컨트롤러로 데이터를 직접 전달하는 방식이다. 주로 영속적으로 값을 저장할 필요가 없는 화면 전환 시에 사용된다. ex) 선택 카테고리 값을 전달받는 쪽의 뷰 컨트롤러가 전달받을 값의 명세를 모두 파악하고 이를 대입할 변수를 미리 생성해 두어야 한다. [ 전달 과정 (VC1 --> VC2) ] VC1에서 VC2로 전달할 값을 준비한다. VC2에서는 값을 대입받을 프로퍼티를 정의한다. VC1에서는 VC2의 인스턴스를 직접 생성하거나, 이미 생성되어 있는 인스턴스의 참조를 읽어온다. VC1에서는 2. 에서 정의한 VC2 인스턴..
· iOS
앞서 공부한 세그웨이를 사용해서 화면을 전환할 경우 화면 복귀를 할 때는 2번째 뷰 컨트롤러에서 1번째 뷰 컨트롤러로 향하는 세그웨이를 추가해주면 될 것이라고 생각할 수 있다. 하지만 이렇게 할 경우 오류가 발생한다. 세그웨이는 목적지가 되는 뷰 컨트롤러의 인스턴스를 자동으로 생성해준다. 따라서 2번째-->1번째 뷰 컨트롤러로 새로운 세그웨이를 연결하면 기존에 존재하면 1번째 뷰 컨트롤러의 인스턴스 말고도 추가적으로 새로운 인스턴스가 하나 더 생기게 된다. 이렇게 되면 동일한 뷰 컨트롤러가 중복되기 때문에 앱에서 오류가 발생할 수 있다. 일반적으로 iOS에서 뷰 컨트롤러의 인스턴스는 한개 이상 존재해서는 안 된다!! 세그웨이에서 Unwind를 구현할 때도 앞에서 공부한 화면 복귀용 메소드를 이용할 수 있..
kybeen
기록하레이