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:'NVActivityIndicatorView'没有可见的@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文件:NVActivityIndicatorView.swift
任何想法出了什么问题?
提前致谢!
为了在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。
因此,我认为您将需要创建另一个没有可选参数和默认参数的初始化程序。
| 归档时间: |
|
| 查看次数: |
2623 次 |
| 最近记录: |