protocol
키워드를 사용한다.protocol ExampleProtocol{
var simpleDescription : String { get }
mutating func adjust()
}
class SimpleClass : ExampleProtocol{
var simpleDescription : String = "A very simple class."
var anotherProperty : Int = 69105
func adjust(){
// mutating 키워드가 필요하지 않다.
simpleDescription += " Now 100% adjusted."
}
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription
struct SimpleStructure : ExampleProtocol{
var simpleDescription : String = "A simple structure"
mutating func adjust(){
simpleDescription += " (adjusted)"
}
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription
클래스의 메서드는 항상 클래스를 수정할 수 있으므로, SimpleClass
의 선언에는 mutating
으로 표시된 메서드가 필요하지 않다.
새로운 메서드와 계산된 프로퍼티가 같이 존재하는 타입에 기능을 추가하려면 확장 extension
을 사용한다.
확장 extension
을 사용하여 다른 곳에 선언된 타입
또는 라이브러리
나 프레임워크
에서 가져온 타입에 프로토콜 준수를 추가할 수 있다.
extension Int : ExampleProtocol{
var simpleDescription : String {
return "The number \(self)"
}
mutating func adjust(){
self += 42
}
}
print(7.simpleDescription)
// Prints "The number 7"
extension Int : ExampleProtocol{
var simpleDescription : String {
return "The number \(self)"
}
mutating func adjust(){
self += 42
}
print(7.simpleDescription)
// Prints "The number 7"
}