Одним из решений является использование Composition, а не Inheritance в качестве проектного решения. Поскольку объект Person также должен быть одноэлементным, мы делаем его неизменным и инициализируем его в приватном init
методе, используя требуемый init
public class Jon {
static let instance = Jon()
private init() {
person = Person()
}
public let person: Person
}
И его можно использовать так (например, со свойством name
)
var jon = Jon.instance
jon.person.name = "John"
или Person может быть сделан частным, а вычисляемые свойства добавлены в класс singleton
public class Jon {
static let instance = Jon()
private init() {
person = Person()
}
private let person: Person
var name: String? {
get { return person.name }
set { person.name = newValue}
}
}
и затем к свойству name обращаются напрямую
var jon = Jon.instance
jon.name = "John"