Swift 27

사라진 'Info.plist' 파일 다시 만들기

프로젝트를 생성하거나 기존에 생성된 프로젝트를 사용하려는 경우 필요한 'Info.plist' 파일이 보이지 않는 경우가 있다. 문제를 해결해 보자 해결법은 간단하다. Project > Targets > Info 로 접근한 뒤 Key에 'App Transport Security Settings'를 추가하고 하위에 'Allow Arbitrary Loads'를 추가한다. Value는 'YES'로 설정한다. 짠, 간단하게 'Info.plist' 파일이 다시 나타났다.

207. URL Loading System

URL Loading System iOS는 URL을 사용해 서버와 통신한다. 이를 가능하게 하는 URL Loading System은 서버연동, 다운로드, 업로드에 필요한 다양한 API를 제공한다. URL Session URL Session은 네트워크 연결 설정과 요청, 응답을 처리하는 역할을 한다. Shared Session 단순한 네트워크 요청 기본값을 사용하며, Completion Handler를 사용해 완료값을 반환한다. Background 전송을 지원하지 않는다. Default Session 직접 Session을 구성할 때 사용한다. Delegate를 사용해 세부적인 제어가 가능하다. Disk Memory Cache에 완료값을 저장한다. Ephemeral Session Default Session..

173 ~ 174. Advanced Topic

Availiability Condition API 가용성을 확인하는 방법이다. 새로운 OS가 출시되면 새로운 기능을 위한 API가 추가된다. 매번 최신 API를 사용한다면 좋겠지만 현실적으로 불가능한 경우가 많다. 새 애플리케이션을 생성하면 배포 타깃은 자동으로 최신 버전으로 지정된다. 이 상태로 배포하게 되면 해당 버전보다 낮은 상태의 기기들은 이 앱을 사용할 수 없다. 따라서 최신버전 보다는 2~3 정도 낮은 버전을 타깃으로 설정한다. class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. navigati..

170 ~ 172. Selector, Keypath, Dynamic Access

Selector (셀렉터) Selector(셀렉터)는 UIkit에서 method를 지칭하거나, 속성의 getter나 setter를 지칭할 때 사용한다. '지칭한다.'의 의미는 호출한다는 의미가 아닌, 대상을 가리키는 특별한 인스턴스를 얻는다는 뜻이다. 이러한 인스턴스는 버튼과 메소드를 연결하거나, 제스쳐와 메소드를 연결할 때 사용한다. Syntax #selector(methodName) #selector(getter: propertyName) #selector(setter: propertyName) struct Figure { let color: UIColor = .blue func draw() { print("draw") } } let selector = #selector(Figure.draw) 결과 ..

162 ~ 169. Error Handling (에러 처리)

Error Handling (에러 처리) 에러가 발생하면 보통 프로그램이 종료되지만, 미리 판단하여 처리하게 되면 종료를 막을 수 있다. Compiletime Error & Runtime Error (컴파일 타임 에러와 런타임 에러) 에러는 컴파일타임 에러와 런타임 에러가 있다. 컴파일 타임 에러는 대부분 문법과 관련된 에러로, 컴파일러가 제공하는 정보로 쉽게 해결할 수도 있고, 자동 수정 기능을 제공하기도 한다. 런타임 에러는 프로그램이 실행중인 동안 발생한다. 문법적인 에러가 아닌 기기 상태나, 리소스의 상태 등 여러 이유로 발생할 수 있다. Error Protocol (에러 프로토콜) 에러 처리에 사용되는 에러 형식은 에러 프로토콜을 채용하는 것 만으로 쉽게 구현할 수 있다. 보통은 열거형으로 선언..

159 ~ 161. Generics (제네릭)

Generic Function (제네릭 함수) 제네릭을 사용하면 형식에 의존하지 않는 범용 코드를 작성할 수 있다. 코드의 재사용성과 유지보수가 간편해진다는 장점이 있다. func swapInteger(lhs: inout Int, rhs: inout Int) { let tmp = lhs lhs = rhs rhs = tmp } swapInteger(lhs:rhs:) 함수는 두 개의 정수를 받을 경우 의도대로 동작한다. 하지만 정수 형태가 아니라면 에러가 발생한다. 파라미터에 지정된 값의 형태 외엔 전달 받을 수 없기 때문이다. 따라서 같은 형태의 함수를 파라미터 형식을 다르게 하여 여러 개 만들어야 한다. 다만 같은 코드를 중복해 사용했다는 점에서 작업의 불필요한 반복이 늘어나게 된다. 이 문제를 새결할 ..

152 ~ 158. Memory, Value Type and Reference Type (메모리, 값형식과 참조형식)

Memory Basics 메모리는 0과 1을 저장하는 반도체이다. 전기가 통하면 1, 전기가 통하지 않으면 0을 저장할 수 있다. Bit 0과 1을 저장할 수 있는 가장 작은 단위를 Bit(비트)라고 부른다. Bit 0 or 1 Byte 비트 8개를 묶어서 Byte(바이트)라고 부른다. 컴퓨터 데이터 처리의 기본 단위로 사용되며, 양수만 저장 할 때는 0^8개의 경우인 0~255까지, 음수와 양수를 동시에 저장하면 -128~127까지의 범위를 저장할 수 있다. Byte MSB LSB 8개의 비트 중 가장 왼쪽의 비트를 MSB(Most Significant Bit)라고 부르며, 가장 오른쪽의 비트를 LSB(Least Significant Bit)라고 부른다. 데이터 저장 방식 Byte의 양수 저장 컴퓨터에..

135 ~ 139. Extension (익스텐션)

Extension (익스텐션) 익스텐션으로 확장할 수 있는 것은 클래스, 구조체, 열거형, 프로토콜이 있다. 익스텐션은 형식에 새로운 멤버를 추가하는 것은 아니다. 새로운 멤버는 별도의 코드로 구현하고, 형식과 연결해서 기존의 멤버들과 함께 사용할 수 있다. 따라서 따라서 형식 선언을 수정할 수 없는 경우에도 사용할 수 있다. 기본자료형들도 내부적으로 구조체로 구현되어 있기 때문에 기본자료형들을 수정할 수 없어도 익스텐션을 통해 멤버를 확장할 수 있다. 익스텐션으로 멤버를 추가하는 것은 가능하지만 기존의 멤버를 오버 라이딩하는 것은 불가능하다. 만약 오버라이딩이 필요하다면 상속을 통해 서브클래스화 해야 한다. Syntax extension Type { computedProperty computedType..

128 ~ 134. Initializer and Deinitializer (생성자와 소멸자)

Initializers 열거형, 구조체, 클래스는 모두 설계도의 역할을 한다. 이들을 이용해 생성한 것을 인스턴스라고 한다. 새로운 인스턴스를 생성하는 것을 초기화라고 한다. 이 초기화를 담당하는 것이 initializer이다. initializer는 모든 속성을 기본값으로 초기화해서 인스턴스를 기본 상태로 만드는 역할을 한다. 인스턴스가 초기화 되었다라는 것은 initializer가 동작을 완료했을 때 인스턴스의 모든 속성이 기본값을 가졌다는 의미이다. 만약 기본값을 가지지 않은 속성이 있다면 초기화에 실해파고 인스턴스가 생성되지 않는다. 초기화를 하는 방법은 두가지이다. 속성을 생성함과 동시에 초기화 하기 class Position { var x = 0.0 var y = 0.0 } 이 경우 initi..

122 ~ 127. Inheritance and Polymorphism (상속과 다형성)

Inheritance (상속) 코드의 중복 문제와 유지보수의 편의성을 위해 공통적인 속성을 공유하는 방식이다. 예외도 있지만 대부분의 상속관계에 있는 클래스들은 Class Hierarchy(클래스 계층)를 구성한다. 클래스 계층에서 가장 상위에 있는 클래스를 Base Class 혹은 Root Class라고 한다. 그 다음 클래스들은 이 베이스 클래스를 상속 받고, 이러한 관계에서 상위에 존재하는 클래스는 Super Class 혹은 Parent Class , 하위에 존재하는 클래스를 Subclass 혹은 Child Class 라고 부른다. 따라서 정리하면 베이스 클래스 아래로는 하나 이상의 서브클래스가 존재하지만 위로는 수퍼클래스가 존재하지 않는다. 여러개의 서브클래스가 하나의 수퍼클래스를 상속 받는 것은..