
BG Development · За реклама · За контакти |
![]() ![]() ![]() ![]() ![]() |
Здравей! ( Включване | Регистриране ) |
![]() ![]() ![]() |
thrawn |
Публикувано на: 06-03-2021, 18:15
|
||||||||
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3090 Регистриран на: 17.01.17 ![]() |
Измъчва ме една конструкция в swift, която не схващам защо работи/не работи. Имам продокол в който декларирам конструктор (инициализатор). Когато декларирам клас/структура "имплементираща" тоя протокол, нормално, получавам грешка ако съответния конструктор не бъде имплементиран
До тук, ОК. Нещата са логични. Но същата постановка с протокол от стандартните библиотеки се държи по коренно различен начин: Това е протоколът:
а това се компилира без никакви проблеми
Предполагам, някъде има подразбираща се имплементация но още не мога да се ориентирам къде да я търся. А такива дреболии ме дразнят страшно много. Дайте един жокер... |
||||||||
thrawn |
Публикувано на: 07-03-2021, 09:39
|
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 3090 Регистриран на: 17.01.17 ![]() |
Излиза, че в случая се използва известна доза магия.
Имплементацията на констукторът си е задължителна. В ситуацията с Decodable обаче се разчита на компилаторът, който си знае как да имплементира съответния протокол. Ако по някаква причина, компилаторът не може да направи имплементацията ще изведе съобщение за грешка (че съответния конструктор не е имплентиран) и ще трябва да се напише явна имплементация. |
![]() |
![]() ![]() ![]() |