在 Swift 编程语言中,强制要求
“指定的初始化程序必须确保其类引入的所有属性在委托给超类初始化程序之前都已初始化。” 来自另一个 S/O 的报价来源
否则会显示类似以下的错误
属性“self.baz”未在 super.init 调用中初始化
我想在 Swift 中实现以下 Objective-C 代码:
@interface FooBar : NSObject
@property (nonatomic, readonly) NSString *baz;
@end
@implementataion FooBar
@synthesize baz = _baz;
- (instancetype)initWithString:(NSString *)string {
self = [super init];
if (self) {
_baz = [self parseString:string];
}
return self;
}
- (NSString *)parseString:(NSString *)string {
// Perform something on the original string
return ...;
}
@end
以下实现会引发如上所述的编译器错误:
class FooBar: NSObject {
let baz: NSString?
init(string: NSString?) {
super.init()
baz = parseString(string)
}
private func parseString(string: NSString?) -> NSString? {
// Perform something on the original string
return ...;
}
}
如果我执行以下操作,我会收到一条错误消息
在 super.init 初始化 self 之前在方法调用“parseString”中使用 self
class FooBar: NSObject {
let baz: NSString?
init(string: NSString?) {
baz = parseString(string)
super.init()
}
private func parseString(string: NSString?) -> NSString? {
// Perform something on the original string
return string;
}
}
所以我目前的解决方案是使用私有类方法:
class FooBar: NSObject {
let baz: NSString?
init(string: NSString?) {
baz = FooBar.parseString(string)
super.init()
}
private class func parseString(string: NSString?) -> NSString? {
// Perform something on the original string
return ...;
}
}
我的问题是是否有更好的方法来实现相同的目标,还是私有类方法是最好的方法?