Для быстрого развития я создал протоколы, называемые Message
и Socket
.
. Затем следует реальная и фиктивная реализация.Коды здесь:
// Procotols
protocol Message {
}
protocol Socket {
associatedtype T: Message
var messages: [T] { get }
}
// Real implementation
class RealMessage: Message {
}
class RealSocket: Socket {
private(set) var messages: [RealMessage] = []
}
// Mocks
class MockMessage: Message {
}
class MockSocket: Socket {
private(set) var messages: [MockMessage] = []
}
class VC {
// Error here: Protocol 'Socket' can only be used as a generic constraint because it has Self or associated type requirements
var socket: Socket = MockSocket()
// The only way I know to solve this is using the codes below:
// var socket: MockSocket = MockSocket()
}
Мои ожидания:
Поскольку у меня есть два набора сокетов, я бы хотел переключать среду между макетом и реальным, что было бы очень хорошо для разработки и отладки.
Но есть ошибка в VC , которая останавливает меня от выполнения.
Любая помощь будет принята с благодарностью.