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"
}