여러 프로토콜을 신속하게 준수하는 유형
나는 여러 프로토콜을 준수하는 Objective-C 변수를 가지고 있습니다.
id <NSObject, NSCopying, NSCoding> identityToken;
스위프트에서 이런 타입을 어떻게 표현하면 좋을까요?
작동해야 합니다.
var identityToken: NSObjectProtocol & NSCopying & NSCoding
NS Object 대신 NS Object Protocol을 신속하게 사용해야 합니다.
다음은 몇 가지 추가적인 예입니다.
여러 프로토콜을 준수하는 객체 배열:
var array: [NSObjectProtocol & NSCopying & NSCoding]
다중 프로토콜을 준수하는 파라미터로 기능:
func foo(param: NSObjectProtocol & NSCopying & NSCoding) {
}
Swift 3.1 이전 버전의 경우 다음을 사용합니다.
var identityToken: (NSObjectProtocol, NSCopying, NSCoding)
스위프트 3
var idToken: NSObjectProtocol & NSCopying & NSCoding
func foo(_ delegateAndDataSource: UICollectionViewDelegate & UICollectionViewDataSource) { ... }
복합 프로토콜을 타이핑할 수도 있는 것 같습니다. 동일한 프로토콜 조합을 여러 번 사용할 계획이라면 도움이 될 것입니다.
typealias IDToken = NSObjectProtocol & NSCopying & NSCoding
형식 별칭을 사용하여 승인된 답변에 주어진 것과 동일한 예:
var idToken: IDToken
var array: [IDToken] = []
func foo(param: IDToken) { ... }
위의 코너의 답변은 맞지만, 나중에 추가 프로토콜 방법을 추가하거나 최상위 프로토콜을 변경하려면 다른 프로토콜에서 자체적으로 상속되는 별도의 프로토콜을 구현해야 하는 경우가 많습니다.
internal protocol MyOtherProtocol : NSObjectProtocol, NSCopying, NSCoding {
func someOtherNecessaryMethod()
}
그런 다음 활용:
var identityToken : MyOtherProtocol
제네릭의 경우에도 다음과 같이 작동합니다.
func setCollectionViewDataSourceDelegate<D: UICollectionViewDataSource & UICollectionViewDelegate>
언급URL : https://stackoverflow.com/questions/24027380/types-conforming-to-multiple-protocols-in-swift
'programing' 카테고리의 다른 글
블로거 XML 파일을 WXR 파일로 변환하는 방법은? (0) | 2023.11.06 |
---|---|
PHP 5.3을 위한 PHP 5.2 '호환 모드'가 있습니까? (0) | 2023.11.06 |
f() aint16_t를 인쇄하려면 어떻게 해야 합니까? (0) | 2023.11.06 |
Oracle의 MD5를 PHP의 MD5와 일치시키는 방법 (0) | 2023.11.06 |
팬더 WITH 지수에서 데이터 프레임을 사전으로 변환하는 방법 (0) | 2023.11.06 |