将 Obj-C 初始化覆盖函数转换为 Swift 3
Converting Obj-C init override function into Swift 3
如何将MyViewControllerB中的initWithDevice:函数改写成Swift3?
MyViewControllerA
@interface MyViewControllerA : UIViewController
- (instancetype)initWithDevice:(DeviceClass *)device;
@end
@implementation MyViewControllerA
- (instancetype)initWithDevice:(DeviceClass *)device
{
self = [super init];
if ( self ) {
// set a bunch of properties
}
return self;
}
@end
MyViewControllerB
@interface MyViewControllerB : MyViewControllerA
- (instancetype)initWithDevice:(DeviceClass *)device;
@end
@implementation MyViewControllerB
- (instancetype)initWithDevice:(DeviceClass *)device
{
if (self = [super initWithNibName:@"AnotherViewController" bundle:nil]) {
// init stuff for subclass
}
return self;
}
@end
对于 Swift 3.0 和 Swift 2.2
override init(device: DeviceClass) {
super.init(nibName: "AnotherViewController", bundle: nil)
// init stuff for subclass
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
}
您也可以尝试使用此网站将您的 Objective-c 代码转换为 Swift:objectivec2swift
如何将MyViewControllerB中的initWithDevice:函数改写成Swift3?
MyViewControllerA
@interface MyViewControllerA : UIViewController
- (instancetype)initWithDevice:(DeviceClass *)device;
@end
@implementation MyViewControllerA
- (instancetype)initWithDevice:(DeviceClass *)device
{
self = [super init];
if ( self ) {
// set a bunch of properties
}
return self;
}
@end
MyViewControllerB
@interface MyViewControllerB : MyViewControllerA
- (instancetype)initWithDevice:(DeviceClass *)device;
@end
@implementation MyViewControllerB
- (instancetype)initWithDevice:(DeviceClass *)device
{
if (self = [super initWithNibName:@"AnotherViewController" bundle:nil]) {
// init stuff for subclass
}
return self;
}
@end
对于 Swift 3.0 和 Swift 2.2
override init(device: DeviceClass) {
super.init(nibName: "AnotherViewController", bundle: nil)
// init stuff for subclass
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
}
您也可以尝试使用此网站将您的 Objective-c 代码转换为 Swift:objectivec2swift