프로토콜은 특정 기능 수행에 필수적인 요수를 청의한 청사진(blueprint)입니다.
(c++의 interface랑 비슷하다고 생각한다)
필수 프로퍼티는 항상 var로 선언해야 한다
=> var 키워드의 가변성과는 아무런 관계가 없음.
protocol SomeProtocol {
var mustBeSettable: Int { get set }
var doesNotNeedToBeSettable: Int { get }
static var someTypeProperty: Int { get set }
}
mutating 키워드를 사용해 인스턴스에서 변경 가능하다는 것을 표시할 수 있습니다. 이 mutating 키워드는 값타입 형에만 사용합니다.
protocol Togglable {
mutating func toggle()
}
enum OnOffSwitch: Togglable {
case off, on
mutating func toggle() {
switch self {
case .off:
self = .on
case .on:
self = .off
}
}
}
var lightSwitch = OnOffSwitch.off
lightSwitch.toggle()
선택적 구현 조건을 정의할 수 있다.
@objc protocol CounterDataSource {
@objc optional func increment(forCount count: Int) -> Int
@objc optional var fixedIncrement: Int { get }
}