Использование расширений Swift для пользовательских типов
Утверждается, что расширения используются для расширения класса, структуры или перечисления, не требуя подкласса. Это привело меня к мысли, что его предполагаемое использование было разработано для расширения уже существующего типа, такого как String, Int или других более сложных типов в каркасах; типы, которые были разработаны другими, например, в рамках OS X Frameworks.
Я заметил, что типы значений, такие как String, Int, Double и т. Д., Реализованы в виде простых структур со многими расширениями. Например, Double определяется как
struct Double {
/// Create an instance initialized to zero.
init()
init(_bits v: Builtin.FPIEEE64)
/// Create an instance initialized to `value`.
init(_ value: Double)
}
Имея опыт работы в C++, я этого не ожидал и ожидал, что методы по умолчанию будут частью типа, а не расширениями.
Есть ли преимущества для разработки пользовательских типов с расширениями, а не для традиционной объектно-ориентированной инкапсуляции методов в классе или структуре, и если да, то когда было бы целесообразнее использовать этот дизайн над классом или структурой с инкапсулированными методами?