我正在使用这样的不同代码公开课程-
in
此类在框架中,无法修改。
现在的问题是,我被告知要从此类继承并创建新类的单例对象
public class Person {
public required init() {}
}
但是必需的初始化是让用户创建Jon类的多个实例。
有人可以建议如何快速进行此操作吗?
答案 0 :(得分:0)
一种解决方案是使用合成而不是继承作为设计解决方案。由于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设为私有,并将计算的属性添加到单例类中
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"
答案 1 :(得分:0)
我找到了解决方案。希望能对我的解决方案有所帮助。
public class ParentClass {
public required init() {}
}
class SubClass: ParentClass {
static let sharedInstance = SubClass(foo: "")
@available(*, unavailable)
required init() { }
//You can change the init parameter as per your requirement
private init(foo: String) {
super.init()
//Write your initialization code
}
}
如果您不想将任何参数传递给init,则可以执行以下操作。
private init(_ foo: String? = nil) {
super.init()
//Write your initialization code
}
现在,您无需传递任何参数即可初始化对象
static let sharedInstance = SubClass()