如何在Objective C中使用多个param调用Swift初始化方法

Cod*_*ger 6 objective-c initializer swift

我在我的Swift文件中有一个Initializer方法,如下所示:

public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) {
        self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE
        self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR
        self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING
        super.init(frame: frame)
        isHidden = true
}
Run Code Online (Sandbox Code Playgroud)

我想从我的Objective-C文件中调用此方法,但在编译时抛出它的错误.

错误:

/ Users/Desktop/old data/ChatScreenViewController.m:396:92:'NVActivityIndi​​catorView'没有可见的@interface声明选择器'initWithFrame:type:color:padding:'

Obj-C调用代码:

NVActivityIndicatorView *objNVActivityIndicatorView = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) type:NVActivityIndicatorTypeLineScalePulseOut color:[UIColor blueColor] padding:10]
Run Code Online (Sandbox Code Playgroud)

我试过的:

Objective-C在我的快速课程中添加

@objc public final class NVActivityIndicatorView: UIView
Run Code Online (Sandbox Code Playgroud)

仍然无法访问上述方法.

我的Swift文件:NVActivityIndi​​catorView.swift

任何想法出了什么问题?

提前致谢!

Nik*_*ure 6

为了在Objective-C中可访问和使用,Swift类必须是Objective-C类的后代,或者必须标记为@objc。

还有这个答案

此苹果文档还将帮助您理解。

因此,您可以选择从一些Objective C类继承您的类(在这种情况下,编译器添加@objc),或者将@objc自己添加到您的类中。

您还需要添加到Objective C类中-

#import "<#ProjectName#>-Swift.h"
Run Code Online (Sandbox Code Playgroud)

真正解决这个特定问题的方法

请查看此问题,您将自己获得解决方案。:)

这个问题说,optional parameters随着所有参数的出现,从Swift到Objective C是不可能暴露的_Nonnull

因此,我认为您将需要创建另一个没有可选参数和默认参数的初始化程序。