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

时间:2017-09-25 07:24:41

标签: 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文件中调用此方法,但在编译时抛出错误。

错误:

  

/用户/桌面/旧   data / ChatScreenViewController.m:396:92:不   'NVActivityIndi​​catorView'的可见@interface声明了选择器   'initWithFrame:方法类型:颜色:填充:

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

任何想法出了什么问题?

提前致谢!

3 个答案:

答案 0 :(得分:4)

  

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

还有answer

This apple doc也可以帮助您理解。

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

您还需要添加到Objective C类 -

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

对此特定问题的真正解决方案

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

该问题表明optional parameters无法从Swift暴露给Objective C,因为所有参数都变为_Nonnull

所以我认为你需要创建另一个没有选项和默认参数的初始化器。

答案 1 :(得分:3)

  1. 尝试将@objc添加到函数中:

    @objc public init(frame:CGRect,type:NVActivityIndi​​catorType?= nil,color:UIColor?= nil,padding:CGFloat?= nil){

  2. 您需要创建一个桥接标头。看到 https://medium.com/ios-os-x-development/swift-and-objective-c-interoperability-2add8e6d6887

答案 2 :(得分:0)

尝试在Build Phases中将@objc添加到Swift类 - &gt;编译Source并再次调用该方法。我希望这会奏效。