Programing

신속하게 여러 프로토콜을 준수하는 유형

lottogame 2020. 10. 29. 07:47
반응형

신속하게 여러 프로토콜을 준수하는 유형


여러 프로토콜을 준수하는 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

반응형