iOS
Protocol에서 Optional 선언
삼쓰 웅쓰
2020. 3. 4. 16:06
728x90
protocol에서 optioanl 을 사용하면 다음과 같은 오류를 만나게 됩니다.
'optional' can only be applied to members of an @objc protocol
Swift document를 보면,
Swift는 optional을 사용하려면 반드시 @objc 를 붙여주라고 하고 있네요,
class는 Objective-C 를 상속받거나 @objc가 붙은 클래스에서만 사용이 가능하니 당연히 struct나 enum에서는 사용할 수 없겠죠?
swift는 protocol에서 optioanl을 지원하지 않으니,
대신 @objc 를 지원하는 @objc 를 사용하는 것이 가장 쉬운 방법이 되겠습니다.
@objc protocol CounterDataSource {
@objc optional func increment(forCount count: Int) -> Int
@objc optional var fixedIncrement: Int { get }
}
이런식으로 사용하면 되겠군요 :)
하지만 꼭 순수 Swift 문법을 사용하고 싶다면, protocol을 extension해서 비어있는 함수를 구현을 해주는 방법이 있습니다.
protocl MyProtocol: class {
func myFunc()
}
extension MyProtocol {
func myFunc() {
...
}
}
다음과 같이 한다면 MyProtocol을 상속할 때 꼭 myFunc을 구현해주지 않아도 된답니다.
감사합니다 :)