아웅 넘 추워 다들 따뜻하게 입으십셔 ..
옛날에 어트리뷰트
공부했었음! 기억난다 기억나!
어트리뷰트
는 컴파일러에게
을 제공합니다!
@available(iOS 10.0, macOS 10.12, *)
class SomeType { // "SomeType" 선언은 iOS 10.0 버전이상에서만 읽을 수 있음
}
만약! 프로토콜을 구현을 했는데 구현하고 싶지 않은 프로퍼티나, 매서드가 있다면 어떻게하면 좋을까?
바로 이렇게 구현할 수 있다!
@objc protocol Remote {
@objc optional var isOn: Bool { get set }
func turnOn()
func turnOff()
@objc optional func doNeflix()
}
class TV: Remote {
var isOn = false
func turnOn() {}
func turnOff() {}
}
우리가 앞전에 확장을 배웠을 때..
사실 프로토콜도 확장이 된다는 사실!?
만약에.. 밑과 같은 코드가 있다면..
protocol Remote {
func turnOn()
func turnOff()
}
class TV1: Remote {
func turnOn() { print("리모콘 켜기") }
func turnOff() { print("리모콘 끄기") }
}
struct Aircon1: Remote {
func turnOn() { print("리모콘 켜기") }
func turnOff() { print("리모콘 끄기") }
}
{ print("리모콘 끄기") }
가 반복적으로 구현되고 있으니! 이걸 축약해 줄 수는 없을까?
아 있죵ㅋ
바로 밑처럼 구현하면 됩니다ㅋㅎ
protocol Remote {
func turnOn()
func turnOff()
}
extension Remote {
func turnOn() { print("리모콘 켜기") }
func turnOff() { print("리모콘 끄기") }
func doAnotherAction() {
print("리모콘 또 다른 동작")
}
}
class TV1: Remote {
}
struct Aircon1: Remote {
}
let tv: TV1 =TV1()
tv.turnOn // 리모콘 켜기
tv.turnOff // 리모콘 끄기
let aircon: Aircon1 = Aircon1()
aircon.turnOn // 리모콘 켜기
aircon.turnOff // 리모콘 끄기
과 같은 식으로! 확장을 할 수도 있습니다!
예전부터 헷갈린게 제 머리속으론 정리가 돼서 기쁘네요!
TIL 시리즈는 막연히 제가 배운 걸 기록하는 공간입니다.