2
我有一個Objective-C初始值設定項(來自另一個項目),我發現它很有用。現在我想將它移植到Swift中,並且Swift的命名約定存在問題。重寫Objective-C無參數初始化爲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
}
}
有沒有寫在斯威夫特一個無參數的init不同的方式,並避免它被混同指定init()
?
不是默認的'UIViewController.init'和你的'initWithNib'完全一樣嗎?無論如何,唯一的解決方法是使用「類方法」,例如'class func createFromNib(){...}'。 – Sulthan
請注意,虛擬參數*可以是void:'便捷init(fromNib:Void)',然後將其稱爲'let vc = ViewController(fromNib:())'。 –
但是@Sulthan是正確的:'let vc = MyViewController()'從主包中的「MyViewController.nib」自動加載視圖控制器。 –