프로토콜(protocol)은 특별한 작업이나 기능 조각에 적합 하도록 메소드, 속성, 그리고 그 외 '필수 조건(requirements)'들의 '밑바탕 설계 (blueprint)를 정의한다. 그런 다음 해당 '필수 조건'들의 실제 구현을 제공하도록 클래스, 구조체, 또는 열거체가 프로토콜을 채택(adopt)할 수 있다. 프로토콜의 필수 조건을 만족하는 어떤 타입이든 해당 프로토콜을 '준수한다(conform)'라고 한다
protocol SomeProtocol {
// 프로토콜 정의는 여기에 둔다.
}
속성(properties)은 값을 특정 클래스, 구조체, 또는 열거체와 결합한다. '저장(stored)속성'은 상수와 변수 값을 인스턴스 일부로 저장하는 반면, '계산(computed)속성'은 값을(저장하는 대신) 계산한다. '계산 속성'은 클래스, 구조체, 그리고 열거체를 제공한다.
메소드(methods)는 특정 타입과 결합된 함수이다. 클래스, 구조체, 그리고 열거체 모두, 주어진 타입의 인스턴스와 작업하기 위해서 지정된 '임무 (task)'와 '기능'을 은닉하는, '인스턴스 메소드 (instance methods)'를 정의할 수 있다. 클래스, 구조체, 그리고 열거체는, 타입 자체와 결합된, '타입 메소드(type methods)'도 정의할 수 있다. '타입 메소드'는 오브젝트-C의 '클래스 메소드 (class methods)'와 비슷하다.
class Counter {
var count = 0
func increment() {
count += 1
}
func increment(by amount: Int) {
count += amount
}
func reset() {
count = 0
}
}
클래스는 다른 클래스에서 메소드, 속성, 그리고 다른 '성질(characteristics)'들을 상속(inherit)할 수 있다. 한 클래스가 또 다른 것을 상속할 때, 상속하는 클래스는 하위 클래스(subclass)라고 하고, 상속을 주는 클래스는 상위 클래스(superclass)라고 한다. 상속은 스위프트에서 클래스를 다른 타입들과 구분짓는 기본 작동 방식이다
생성자는 사용을 위해 클래스, 구조체, 또는 열거체의 인스턴스를 준비하는 과정이다. 이 과정은 해당 인스턴스의 각 저장 속성에 초기 값을 설정하는 것과 새로운 인스턴스르 사용하기 전에 필수로 준비해야 할 어떤 설정 또는 초기화를 포함한다.