스위프트 기초 - 야곰닷넷
Lower Camel Case( function, method, variable, constant )Upper Camel Case( type(class, struct, enum, extension… ) )print 함수dump 함수프로그램 실행 중 문자열 내에 변수 또
swift는 기본적으로 데이터 타입끼리의 호환이 안된다라고 생각하면 편하다.
Any : Swift의 모든 타입을 지칭하는 키워드AnyObject : 모든 클래스 타입을 지칭하는 프로토콜nil : 없음을 의미하는 키워드
타입 설명Array : 순서가 있는 리스트 컬렉션Dictionary : 키와 값의 쌍으로 이루어진 컬렉션Set : 순서가 없고, 멤버가 유일한 컬렉션ArrayDictionarySet
함수를 호출할 때 함수 사용자의 입장에서 매개변수의 역할을 좀 더 명확하게 표현하고자 할 때 사용한다전달 받을 값의 개수를 알기 어려울 때 사용할 수 있다스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이므로 스위프트의 함수는 일급객체이다. 그래서 함
조건에 괄호를 생략해도 무방하다. 또한 조건에는 무조건 bool타입이 들어가야만 한다.swift에서 switch문은 상당히 강력하다고 한다.// 범위 연산자를 활용하면 더욱 쉽고 유용합니다switch someInteger {case 0: print("zero")c
기존 변수처럼 활용이 가능하고 nil 할당이 가능하지만 잘못된 접근으로 런타임 오류가 발생할 여지가 있다.
타입 프로퍼티 예제
구조체와 상당히 유사한데 구조체는 값타입이지만 클래스는 참조타입이라는 점이 크게 다른점이다. 클래스는 다중 상속이 되지 않는다는 점을 기억해두자.구조체와는 다르게 내부에서 선언한 let에 대하여 var 과 let으로 선언한후 둘다 값변경이 가능하다.
스위프트의 열거형은 다른 언어의 열거형과는 많이 다르다. 잘 살펴보아야 할 스위프트의 기능 중 하나이다.enum은 타입이므로 대문자 카멜케이스를 사용하여 이름을 정의한다각 case는 소문자 카멜케이스로 정의한다각 case는 그 자체가 고유의 값이다각 케이스는 한 줄에
열거형과 구조체는 값 타입이며, 클래스는 참조 타입이라는 것이 가장 큰 차이이다. 또한, 클래스는 상속이 가능하지만 구조체와 열거형은 상속이 불가능하다.
클로저는 코드의 블럭이다. 일급시민(first-citizen)으로, 전달인자, 변수, 상수 등으로 저장, 전달이 가능하다.함수는 클로저의 일종으로, 이름이 있는 클로저라고 생각하면 된다.
클로저는 다양한 모습으로 표현될 수 있다.함수의 매개변수 마지막으로 전달되는 클로저는 후행클로저(trailing closure)로 함수 밖에 구현할 수 있다.컴파일러가 클로저의 타입을 유추할 수 있는 경우 매개변수, 반환 타입을 생략할 수 있다.반환 값이 있는 경우,
프로퍼티는 클래스, 구조체, 열거형과 연관된 값이다. 타입과 관련된 값을 저장할 수도, 연산할 수도 있다.인스턴스 저장 프로퍼티타입 저장 프로퍼티인스턴스 연산 프로퍼티타입 연산 프로퍼티지연 저장 프로퍼티프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다. 다만
프로퍼티 감시자를 사용하면 프로퍼티 값이 변경될 때 원하는 동작을 수행할 수 있다. 값이 변경되기 직전에 willSet블럭이, 값이 변경된 직후에 didSet블럭이 호출된다. 둘 중 필요한 하나만 구현해 주어도 무관하다. 변경되려는 값이 기존 값과 똑같더라도 프로퍼티
스위프트의 상속은 클래스, 프로토콜 등에서 가능하다. 열거형, 구조체는 상속이 불가능하다. 스위프트는 다중상속을 지원하지 않는다.
인스턴스를 생성하는 이니셜라이저와 클래스의 인스턴스가 소멸될 때 호출되는 디이니셜라이저가 있다.프로퍼티 초기값이니셜라이저 init디이니셜라이저 deinit스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. 프로퍼티에 미리 기본
예제 클래스 옵셔널 체이닝 사용 nil 병합 연산자
타입 캐스팅 예제를 위한 클래스 정의 타입 확인 업 캐스팅 다운 캐스팅 조건부 다운 캐스팅 강제 다운 캐스팅 활용
애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있다.
프로토콜(Protocol) 은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted) 해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의
익스텐션(Extension) 은 스위프트의 강력한 기능 중 하나이다. 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다.기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입
자판기 동작 도중 발생한 오류를 던지는 메서드를 구현해보자.오류 발생의 여지가 있는 메서드는 throws를 사용하여 오류를 내포하는 함수임을 표시한다.
map함수는 컨테이너 내부의 기존 데이터를 변형(transform)하여 새로운 컨테이너를 생성한다.filter함수는 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출한다.reduce함수는 컨테이너 내부의 콘텐츠를 하나로 통합한다.
스위프트의 접근제어는 모듈과 소스파일을 기반으로 설계되었다.모듈(Module)은 배포할 코드의 묶음 단위이다. 통상 하나의 프레임워크(Framework)나 라이브러리(Library) 또는 애플리케이션(Application)이 모듈 단위가 될 수 있다. 스위프트에서는 i