通常,我会创建一个类的实例:
父类:
@interface baseClass
+ (instancetype)task;
@end
@implement baseClass
+ (instancetype)task {
return [[[self class] alloc] init];
}
@end
然后在儿童班:
@interface childClass : baseClass
@end
@implement childClass
@end
最后,我可以使用:
创建一个实例childClass *pChild = [childClass task];
如何使用Swift编程语言实现此功能?
换句话说,我怎样才能迅速实施[[[self class] alloc] init]
?
答案 0 :(得分:0)
我觉得你把你的问题标记为单身有点不安全,但基本上你提出的代码根本与单身人士无关,所以我试图模仿原来的课程并展示一些选项在这里。
这些是用 Swift 2.2 编写的。
最初完美无缺:
class BaseClass {
class func task() -> BaseClass {
return BaseClass()
}
// ...
}
class ChildClass : BaseClass {
override class func task() -> ChildClass {
return ChildClass()
}
// ...
}
那么你就可以得到这样的实例:
let bTask: BaseClass = BaseClass.task()
let cTask: ChildClass = ChildClass.task()
如果这样的事情看起来更合理,你也可以这样做:
class BaseClass {
class var task: AnyObject {
get {
return self.init()
}
}
required init() {
}
// ...
}
class ChildClass : BaseClass {
// ...
}
然后你可以实例化你的类,如:
let bTask: BaseClass = BaseClass.task as! BaseClass
let cTask: ChildClass = ChildClass.task as! ChildClass
如果您对上述任何想法不满意,这里还有另一个选项:
class BaseClass {
class func task() -> Self {
return self.init()
}
required init() {
}
// ...
}
class ChildClass : BaseClass {
// ...
}
实例化与第一种情况类似:
let bTask: BaseClass = BaseClass.task()
let cTask: ChildClass = ChildClass.task()
注意:如果您想要处理真正的单身人士,您可能需要优化所选择的最终代码概念,这些示例并不像我在开头提到的那样完美,但它们会向您展示一些选项可以有,你可以用作模板。
答案 1 :(得分:0)
如果AClass不是NSObject
的子类
class AClass {
required init() {
}
class func task() -> Self {
return self.init()
}
}
class BClass : AClass {
}
let x = BClass.task()
您需要实施init()
并添加required
关键字,因为如果想要子类BClass
或其他继承自AClass
的类可以使用task
,那么您需要确保子类可以使用init()
;
否则您需要添加final
关键字:
final class AClass {
init() {
}
class func task() -> Self {
return self.init()
}
}
但我认为你不需要它。
如果AClass继承自NSObject
,则需要覆盖init()
并添加required
:
class AClass : NSObject {
required override init() {
}
class func task() -> Self {
return self.init()
}
}
class BClass : AClass {
}
答案 2 :(得分:-1)
在Swift中(在每个函数之前添加类):
class baseClass: NSObject {
class func task() {
}
}
class childClass: baseClass {
}
let test = childClass.task()
答案 3 :(得分:-1)
class var sharedInstance :CommonUtil {
struct Singleton {
static let instance = CommonUtil()
}
return Singleton.instance
}