Могу ли я продлить последний класс в Swift?

Я использую стороннюю библиотеку для нового приложения, которое я делаю с помощью Swift. Автор класса / библиотеки сделал окончательное использование final ключевое слово, вероятно, для оптимизации и предотвращения переопределения его свойств и методов.

Пример:

final public class ExampleClass {
   // Properties and Methods here
}

Могу ли я расширить класс и добавить к нему новые свойства и методы, не переопределяя значения по умолчанию?

Вот так:

extension ExampleClass {
    // New Properties and Methods inside
}

2 ответа

Расширение может не содержать хранимых свойств, но вы можете добавить методы внутрь.

Расширения (например, категории Objective-C) не допускают сохраненных свойств.
Методы и вычисленные свойства хороши, хотя.

Обычный (но IMO хакерский) обходной путь в Objective-C заключался в использовании связанных объектов для получения хранилища внутри категорий. Это также работает в Swift, если вы import ObjectiveC,
Этот ответ содержит некоторые детали.

Да, вы можете продлить последний класс. Это расширение должно следовать обычным правилам для расширений, иначе ничего особенного.

Хотя вы не можете создавать новые сохраненные свойства в расширениях, вы можете добавлять методы и вычисляемые свойства.

Пример вычисляемого свойства:

extension ExampleClass { 

  // computed properties do not have a setter, only get access
  var asInt: Int? { 
    Int(aStringPropertyOnTheClass) 
  }
}
Другие вопросы по тегам