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