Проблемы с самонастраиванием внутренних расширений протокола Swift с инициализацией
Я ищу способ добавить инициализатор по умолчанию к протоколу через расширения протокола.
Мой протокол:
protocol TestProtocol {
var myVar : Double { get set }
init(value: Double)
init(existingStruct : TestProtocol)
}
Я реализовал структуру, используя этот протокол, как:
struct TestStruct : TestProtocol {
var myVar : Double
init(value : Double) {
myVar = value
}
init (existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}
Однако, если я попытаюсь через расширение сделать инициализатор по умолчанию для этого протокола, я столкнусь с проблемами:
extension TestProtocol {
init(value : Double) {
myVar = value
}
init(existingStruct : TestProtocol) {
myVar = existingStruct.myVar
}
}
Если обе строки присваивания выдают ошибку
Переменная 'self' передается по ссылке перед инициализацией
Есть ли способ сделать эту работу - или ограничено ли я использованием классов?
![enter image description here]()
Ответы
Ответ 1
Ваш вопрос почти такой же, как в этом сообщении, который я ответил вчера.
Вот трюк, чтобы решить эту проблему:)
protocol TestProtocol {
var myVar : Double { get set }
init() // designated initializer which will ensure that your class or structer type will instantiate correctly
}
struct TestStruct : TestProtocol {
var myVar : Double
init() {
myVar = 0
}
}
extension TestProtocol {
init(value : Double) {
self.init()
myVar = value
}
init(existingStruct : TestProtocol) {
self.init()
myVar = existingStruct.myVar
}
}
Хорошего дня.:) Расширение протокола так приятно.