Objective-c 看不到 Swift 类的方法

myp*_*unt 2 methods class objective-c swift

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

public var Name = [String]()
public var Author = [String]()
public var Url = [String]()
Run Code Online (Sandbox Code Playgroud)

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

@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}
}
Run Code Online (Sandbox Code Playgroud)

我的Objective-C代码:

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


   - (void)viewDidLoad {
       [super viewDidLoad];

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


   }

@end
Run Code Online (Sandbox Code Playgroud)

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

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

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

先感谢您!

rma*_*ddy 5

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

@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}
}
Run Code Online (Sandbox Code Playgroud)

或者,@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}
}
Run Code Online (Sandbox Code Playgroud)

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