ios - 如何在 Objective-C 中使用多个参数调用 Swift 初始化方法

标签 ios objective-c swift initializer

我的 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
}

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

错误:

/Users/Desktop/old data/ChatScreenViewController.m:396:92: No visible @interface for 'NVActivityIndicatorView' declares the selector 'initWithFrame:type:color:padding:'

Obj-C调用代码:

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

我尝试了什么:

在我的 Swift 类中添加了 @objc

@objc public final class NVActivityIndicatorView: UIView

仍然无法访问上述方法。

我的 Swift 文件:NVActivityIndicatorView.swift

出了什么问题?

最佳答案

To be accessible and usable in Objective-C, a Swift class must be a descendant of an Objective-C class or it must be marked @objc.

还有这个answer .

This apple doc也将帮助您理解。

所以你的选择是要么从一些 Objective C 类继承你的类(在这种情况下,编译器添加 @objc),要么自己添加 @objc你的类(class)。

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

#import "<#ProjectName#>-Swift.h"

这个具体问题的真正解决方案

请看this question ,您将自己获得解决方案。 :)

那个问题说 optional parameters 不能从 Swift 暴露给 Objective C,因为所有参数都变成了 _Nonnull

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

关于ios - 如何在 Objective-C 中使用多个参数调用 Swift 初始化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46399674/

相关文章:

swift - 无法将类型 'GenericClass<Class>' 的值转换为预期的参数类型 'GenericClass<Class>?'

objective-c - 如何翻转单个 UIView?

ios - UINavigationBar 背景——如何覆盖所有尺寸、分辨率和设备?

objective-c - NSArray 解析有什么不同?

简单窗口中的 Objective-C 日历。如何?

swift - 如何将 UInt8 转换为可以连接到字符串的数据类型?

ios - 选项的 Swift 问题

ios - 编辑相同对象的 NSMutableArray

iphone - NSDateFormatter,我做错了什么还是这是一个错误?

ios - 在 IOS Objective c 应用程序中自定义导航栏