将Objective-C无参数init重写为Swift方便的init



我有一个Objective-C初始值设定项(来自另一个项目),我发现它很有用。现在我想把它移植到Swift,Swift的命名约定有问题。

.h

@interface UIViewController (FromNib)
-(nullable instancetype)initFromNib;
@end

.m

#import "FromNib.h"
@implementation UIViewController (FromNib)
-(nullable instancetype)initFromNib {
    self = [self initWithNibName: NSStringFromClass([self class])
                          bundle: [NSBundle mainBundle]];
    if (self == nil) {
        NSLog(@"nNib with name %@ not found in the main bundle.n", NSStringFromClass([self class]));
    }
    return self;
}
@end

由于Objective-C识别名称以init开头的方法,因此它将init视为不同于initWith...initFrom。Swift根据传递的参数进行区分。使init()与初始值设定项不同的唯一方法(我已经想到)是传递一个伪参数:

extension UIViewController {
    convenience init(FromNib:Int) {
        self.init()
        // the rest of the code
    }
}

有没有其他方法可以在Swift中编写无参数init,并避免它与指定的init()混淆?

@Sulthan和@Martin R

说得好。默认的init()正是这样做的。非常感谢。问题解决了。

最新更新