BG Development


  Reply to this topicStart new topicStart Poll

> Протоколи в swift
thrawn
Публикувано на: 06-03-2021, 18:15
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3090
Регистриран на: 17.01.17



Измъчва ме една конструкция в swift, която не схващам защо работи/не работи.

Имам продокол в който декларирам конструктор (инициализатор). Когато декларирам клас/структура "имплементираща" тоя протокол, нормално, получавам грешка ако съответния конструктор не бъде имплементиран

CODE
protocol Test {
   init(_ value: String)
}

struct MyStruct: Test {
   var name: String?
}


QUOTE
protocol requires initializer 'init(_:)' with type 'String';


До тук, ОК. Нещата са логични.
Но същата постановка с протокол от стандартните библиотеки се държи по коренно различен начин:

Това е протоколът:
CODE
/// A type that can decode itself from an external representation.
public protocol Decodable {

   /// Creates a new instance by decoding from the given decoder.
   ///
   /// This initializer throws an error if reading from the decoder fails, or
   /// if the data read is corrupted or otherwise invalid.
   ///
   /// - Parameter decoder: The decoder to read data from.
   init(from decoder: Decoder) throws
}


а това се компилира без никакви проблеми
CODE
struct MyStruct: Decodable {
   var name: String?
}


Предполагам, някъде има подразбираща се имплементация но още не мога да се ориентирам къде да я търся. А такива дреболии ме дразнят страшно много.

Дайте един жокер...
PMEmail Poster
Top
thrawn
Публикувано на: 07-03-2021, 09:39
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3090
Регистриран на: 17.01.17



Излиза, че в случая се използва известна доза магия.

Имплементацията на констукторът си е задължителна. В ситуацията с Decodable обаче се разчита на компилаторът, който си знае как да имплементира съответния протокол. Ако по някаква причина, компилаторът не може да направи имплементацията ще изведе съобщение за грешка (че съответния конструктор не е имплентиран) и ще трябва да се напише явна имплементация.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0