在我正在使用的第三方库中有一个 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方法,如下所示:


```java
}

但是我收到编译器错误:

 `Must call a designated initializer of the superclass 'ALAlertBanner'` 

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

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

我一直在考虑的选项:

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


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