Могу ли я продлить последний класс в 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)
}
}