Objective-c 看不到 Swift 类的方法

Objective-c doesn't see methods of Swift class

提问人:mypersonalaccount 提问时间:7/25/2018 更新时间:5/10/2019 访问量:1519

问:

目前我需要在 Objective-c 代码中使用我的 Swift 全局变量。这些是我的变量:

public var Name = [String]()
public var Author = [String]()
public var Url = [String]()

这是一个返回我的公共变量的类:

@objc class AppConstant: NSObject {
   private override init() {}
   class func name() -> [String] { return Name }
   class func author() -> [String] { return Author}
   class func url() -> [String] { return Url}
}

我的 Objective-C 代码:

@implementation SecondViewController
   NSArray *urlArray;
   NSArray *nameArray;
   NSArray *authorArray;


   - (void)viewDidLoad {
       [super viewDidLoad];

       urlArray = [AppConstant url];
       nameArray = [AppConstant name];
       authorArray = [AppConstant author];


   }

@end

我认为一切都应该没问题,但它返回错误

选择器“url”/“name”/“author”没有已知的类方法。

有人可以解释错误在哪里。 我按照这里的解释做了所有事情,但它不起作用。希望有人能帮助我

先谢谢你!

Objective-C Swift 方法

评论

0赞 Knight0fDragon 7/26/2018
如果要向 objective-c 公开整个类,则在要为单个方法公开的方法旁边使用@objcMembersclass@objc

答:

1赞 Shehata Gamal 7/26/2018 #1

您需要导入

#import "productName-Swift.h"

评论

0赞 mypersonalaccount 7/26/2018
是否有必要在该项目中导入 main.m?因为我的项目是基于 Swift 的,所以我的 App 委托文件也是 swift,因此 main.m 不起作用
5赞 rmaddy 7/26/2018 #2

您需要添加到要向 Objective-C 公开的任何属性或方法。@objc

@objc class AppConstant: NSObject {
   private override init() {}

   @objc class func name() -> [String] { return Name }
   @objc class func author() -> [String] { return Author}
   @objc class func url() -> [String] { return Url}
}

或者,如果要公开所有非私有属性和方法,可以使用:@objcMembers

@objcMembers class AppConstant: NSObject {
   private override init() {}

   class func name() -> [String] { return Name }
   class func author() -> [String] { return Author}
   class func url() -> [String] { return Url}
}

这是 Swift 4 与 Swift 3 的更改。请注意,您链接的旧问题已有 4 年历史。从那时起,Swift 发生了很大变化。

评论

0赞 rmaddy 7/26/2018
@Sh_Khan 在现已删除的评论中,OP 声称该解决方案解决了他们的问题,这就是他们接受它的原因。