programing

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

css3 2023. 11. 6. 22:00

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

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