ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Protocol에서 Optional 선언
    iOS 2020. 3. 4. 16:06

    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을 구현해주지 않아도 된답니다.

     

    감사합니다 :)

    'iOS' 카테고리의 다른 글

    TextView 라인 수 구하기  (0) 2020.03.16
    Bundle  (0) 2020.03.13
    포토샵, 일러스트 웹, 앱용 이미지 @2x @3x 변환  (0) 2020.03.03
    iOS) simulator에서 API error  (0) 2020.03.01
    iOS) Realm Numeric Optional  (0) 2020.02.28

    댓글

Designed by Tistory.