Я пытаюсь создать протокол, который имеет два связанных типа.Один из этих связанных типов предназначен для делегата.Когда я пытаюсь использовать другой протокол в качестве связанного типа, я получаю сообщение об ошибке «Тип« HostConnectionService »не соответствует протоколу« ConnectionService ».Код, который я написал, написан ниже:
protocol ConnectionService: class {
associatedtype Peer: Sharelist.Peer
associatedtype Delegate: ConnectionServiceDelegate
var connectedPeers: [Peer] { get }
var delegate: Delegate? { get }
}
protocol ConnectionServiceDelegate { }
// Error
class HostConnectionService: NSObject, ConnectionService {
typealias Peer = GuestPeer
typealias Delegate = HostConnectionServiceDelegate
var delegate: HostConnectionServiceDelegate?
var connectedPeers: [GuestPeer] = []
}
protocol HostConnectionServiceDelegate: ConnectionServiceDelegate { }
Когда я изменяю строку
typealias Delegate = HostConnectionServiceDelegate
на непротокольный тип, я больше не получаю сообщение об ошибке:
struct NonProtocolConnectionServiceDelegate: ConnectionServiceDelegate { }
// No Error
class HostConnectionSertice: NSObject, ConnectionService {
...
typealias Delegate = NonProtocolConnectionServiceDelegate
...
}
Это фундаментальное ограничение Свифта, или я что-то не так делаю?