프로토콜 채택을 클래스 유형으로 제한하려면 :class
프로토콜 또는 @objc
프로토콜을 사용할 수 있습니다.@objc보다 클래스 전용 프로토콜을 사용해야하는시기는 언제입니까?
그러나 나는 @objc
프로토콜보다 "클래스 전용 프로토콜"의 이점을 보지 못했습니다.
의 차이는 내가 알고
크기
@objc
이 더 많은 공간이 효율적입니다. 만@objc
프로토콜에 대한@objc protocol ProtocolObjC {} protocol ProtocolClass: class {} let obj:AnyObject = NSObject() obj is ProtocolObjC // -> false obj is ProtocolClass // < [!] error: cannot downcast from 'AnyObject' to [email protected] protocol type 'ProtocolClass'
선택 의정서 요구 사항
을 프로토콜 적합성
만에@objc
프로토콜에 대한 확인@objc protocol ProtocolObjC {} protocol ProtocolClass: class {} sizeof(ProtocolObjC) // -> 8 sizeof(ProtocolClass) // -> 16
@objc protocol ProtocolObjC { optional func foo() } protocol ProtocolClass: class { optional func foo() // < [!] error: 'optional' can only be applied to members of an @objc protocol }
: class
프로토콜을 사용해야하는 유스 케이스가 있습니까? 또는 누군가가 @objc
의 단점을 알고 있습니까?
ADDED : Thanks @Antonio!
enum MyEnum { case A,B,C }
@objc protocol ProtoObjC {
// Generics
typealias FooType
var foo:FooType {get set}
// Tuple
var bar:(Int,Int) {get set}
// Enum
var baz:MyEnum {get set}
}
모두 컴파일 오류가 발생합니다.
"순수한 문체 선택"에 동의합니다. :) – rintaro