ios - 在 Swift 中子类化 Objective-C 类

标签 ios objective-c swift

我正在使用 MWPhotoBrowser在 Swift 项目中。一个问题是 MWPhotoBrowser 的子类将无法编译并出现这样的错误:

:0: error: cannot override 'init' which has been marked unavailable

我的代码在这里:

class BrowseController: MWPhotoBrowser {
override init() {
    super.init()
    initialize()
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    initialize()
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    initialize()
}
...

下面是父类的所有初始化器:

// Init
- (id)initWithPhotos:(NSArray *)photosArray  __attribute__((deprecated("Use initWithDelegate: instead"))); // Depreciated
- (id)initWithDelegate:(id <MWPhotoBrowserDelegate>)delegate;

在我的子类中覆盖这些初始值设定项没有帮助。但是,如果我在 Objective-C 中创建一个 MyBrowser 子类,然后从该类创建子类,一切正常。

@interface MyBrowser : MWPhotoBrowser
- (id)init;
@end

@implementation MyBrowser
- (id)init {
    if (self = [super init]) {}
    return self;
}
@end

class BrowserController: MyBrowser {
...

我使用的是 Xcode 6.1。这是一个 Swift 错误还是我错过了一些关于 Swift 初始化器的东西?谢谢!

最佳答案

Chanitorn 的回答不太正确,因为 initWithDelegate: 不是 MWPhotoBrowser 的指定初始化器,init:initWithCoder: 是.诀窍是将它们添加到公共(public) MWPhotoBrowser header 并将它们指定为 NS_DESIGNATED_INITIALIZER

- (id)initWithCoder:(NSCoder *)解码器 NS_DESIGNATED_INITIALIZER; - (id)init NS_DESIGNATED_INITIALIZER;

Here's my PR

关于ios - 在 Swift 中子类化 Objective-C 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26958155/

相关文章:

iphone - iOS 标签栏不显示模态视图

ios - 如何限制文本字段只能输入十进制数字?

swift 3 : class doesn't function correctly

java - Appium:断言启动画面

ios - 您的应用包含非公开 API 使用 - 提交应用

ios - 为什么 NSObject 类不能遵守 UITableViewDataSource 协议(protocol)?

ios - 组 TableView 标题显示在 admob 横幅上

objective-c - MKMapView 显示用户位置不工作

objective-c - 有人可以解释子类 UIViewController 的正确方法吗

ios - Swift:如何知道哪个 Storyboard 处于事件状态