모든 클래스 타입이 암시적으로 준수하는 프로토콜
클래스 타입만 AnyObject를 준수할 수 있다
AnyObject를 상속받은 프로토콜은 클래스만 채택할 수 있다.
구조체, 열거형은 이 프로토콜을 채택할 수 없음
protocol SomeProtocol: AnyObject {
// 프로토콜 정의
}
프로토콜 확장과 AnyObject:
extension SomeProtocol where Self: AnyObject {
// 클래스 전용 구현
}
약한 참조와 프로토콜:
weak var delegate: SomeProtocol?
성능 최적화:
타입 캐스팅:
func someFunction(obj: AnyObject) {
if let specificObject = obj as? SpecificClass {
// SpecificClass로 작업
}
}
Objective-C 상호운용성:
id
타입과 브리징됩니다.프로토콜 조합:
func someFunction(obj: SomeProtocol & AnyObject) {
// obj는 SomeProtocol을 준수하는 클래스 인스턴스
}
이러한 개념들은 Swift에서 타입 안전성을 유지하면서 유연한 프로그래밍을 가능하게 합니다. 클래스 전용 기능이 필요한 경우나 참조 타입의 특성을 활용해야 할 때 AnyObject와 프로토콜의 조합을 효과적으로 사용할 수 있습니다.