반응형
신속하게 여러 프로토콜을 준수하는 유형
여러 프로토콜을 준수하는 Objective-C 변수가 있습니다.
id <NSObject, NSCopying, NSCoding> identityToken;
이 유형을 Swift에서 어떻게 표현할까요?
이것은 작동합니다.
var identityToken: NSObjectProtocol & NSCopying & NSCoding
신속하게 NSObject 대신 NSObjectProtocol을 사용해야합니다.
다음은 몇 가지 추가 예입니다.
여러 프로토콜을 준수하는 객체 배열 :
var array: [NSObjectProtocol & NSCopying & NSCoding]
여러 프로토콜을 준수하는 매개 변수가있는 기능 :
func foo(param: NSObjectProtocol & NSCopying & NSCoding) {
}
3.1 이전의 Swift 버전의 경우 다음을 사용하십시오.
var identityToken: (NSObjectProtocol, NSCopying, NSCoding)
스위프트 3
var idToken: NSObjectProtocol & NSCopying & NSCoding
func foo(_ delegateAndDataSource: UICollectionViewDelegate & UICollectionViewDataSource) { ... }
conner의 위 답변은 정확하지만 나중에 추가 프로토콜 메서드를 추가하거나 최상위 프로토콜을 변경하려는 경우 자체적으로 다른 프로토콜에서 상속되고 더 많은 유연성을 허용하는 별도의 프로토콜을 구현해야하는 경우가 많습니다.
internal protocol MyOtherProtocol : NSObjectProtocol, NSCopying, NSCoding {
func someOtherNecessaryMethod()
}
그런 다음 활용 :
var identityToken : MyOtherProtocol
복합 프로토콜을 유형 별명으로 지정할 수도 있습니다. 동일한 프로토콜 조합을 여러 번 사용할 계획 인 경우 유용 할 수 있습니다.
typealias IDToken = NSObjectProtocol & NSCopying & NSCoding
유형 별칭을 사용하여 허용되는 답변에 제공된 것과 동일한 예 :
var idToken: IDToken
var array: [IDToken] = []
func foo(param: IDToken) { ... }
제네릭의 경우 다음과 같이 작동합니다.
func setCollectionViewDataSourceDelegate<D: UICollectionViewDataSource & UICollectionViewDelegate>
참고 URL : https://stackoverflow.com/questions/24027380/types-conforming-to-multiple-protocols-in-swift
반응형
'Programing' 카테고리의 다른 글
Visual Studio 2012 솔루션의 TeamCity에서 MSBuild (0) | 2020.10.29 |
---|---|
.tar.bz2 파일 만들기 Linux (0) | 2020.10.29 |
Firebase (FCM) how to get token (0) | 2020.10.29 |
React JSX 파일에서“Undefined의 'createElement'속성을 읽을 수 없습니다. (0) | 2020.10.29 |
매우 긴 문자열을 자동 줄 바꿈 (0) | 2020.10.29 |