首页 > 解决方案 > Objective-c 看不到 Swift 类的方法

问题描述

目前我需要在 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-cswiftclassmethods

解决方案


你需要@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}
}

或者,@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 发生了很大的变化。


推荐阅读