Swift类中的可继承静态工厂方法
考虑使用Objective-C编写的静态工厂方法:Swift类中的可继承静态工厂方法,swift,inheritance,static-methods,factory-method,Swift,Inheritance,Static Methods,Factory Method,考虑使用Objective-C编写的静态工厂方法: @implementation User + (instancetype)named:(NSString *)name { let user = [self new]; user.name = name; return user; } @end 如何在Swift中实现它? Swift中大量的Self/Self/Type/Type关键字感觉模糊,我很难找到正确的解决方案。解决方案是这样的: class User {
@implementation User
+ (instancetype)named:(NSString *)name {
let user = [self new];
user.name = name;
return user;
}
@end
如何在Swift中实现它?
Swift中大量的
Self
/Self
/Type
/Type
关键字感觉模糊,我很难找到正确的解决方案。解决方案是这样的:
class User {
var name: String
required init(name: String) { self.name = name }
class func named(_ name: String) -> Self {
let instance = Self.init(name: name)
return instance
}
}
以下示例显示一切正常:
class Admin: User {
override class func named(_ name: String) -> Self {
let decoratedName = "~\(name)~"
let instance = Self.init(name: decoratedName)
return instance
}
func ban(user: User) {
print("User \(user.name) banned by \(name)!")
}
}
let user = User.named("John")
let admin = Admin.named("Peter")
admin.ban(user: user) // Yields 'User John banned by ~Peter~!'
因此,您应该注意以下几点:
- 类必须具有
必需的
构造函数(甚至可能没有参数)
- 您应该在方法内部的
上调用它Self.
- 你的方法应该有
access修饰符class
- 方法的返回类型应该是
(注意大写字母s)->Self