从初始化程序调用桥接超类静态工厂方法

时间:2015-09-08 19:14:10

标签: ios objective-c swift

在我正在使用的第三方库中有一个UIView子类(ALAlertBanner - 用Objective-C编写),我想在Swift中继承这个类,以便自定义它 - 让我们称之为MyAlertBanner

在Objective-C中,ALAlertBanner的实例是使用如下的静态工厂方法创建的:

+ (ALAlertBanner *)alertBannerForView:(UIView *)view style:(ALAlertBannerStyle)style position:(ALAlertBannerPosition)position title:(NSString *)title;

...这些在Swift中被桥接到init()方法,如下所示:

alertBanner = ALAlertBanner(forView: alertBannerView(), style: ALAlertBannerStyleNotify, position: ALAlertBannerPositionUnderNavBar, title: title)

我可以毫不费力地在Swift中使用这些方法。

MyAlertBanner中,我将使用与桥接工厂方法相同的方法签名实现一个init方法,如下所示:

```init(forView:UIView,style:ALAlertBannerStyle,position:ALAlertBannerPosition,title:String,subtitle:String){         super.init(forView:forView,style:style,position:position,title:title,subtitle:subtitle)//编译错误

}

```

但是我收到编译错误:

Must call a designated initializer of the superclass 'ALAlertBanner'

我可以通过调用super.init(frame: CGRect)来使编译器静音,但这意味着我的MyAlertBanner实例未正确初始化 - 我需要使用所需参数调用完整的静态工厂方法。

有谁知道如何解决这个问题?有没有办法安抚Swift编译器并说“嘿 - 我知道我在这里做什么!”?

我一直在考虑的选项:

    在Objective-C中的
  • 子类(不太理想,因为我试图尽可能地将这个绿地项目保留在Swift中以备将来的维护原因)

  • 在Swift子类中创建一个静态工厂方法,但这不是非常惯用的Swift。

0 个答案:

没有答案