【问题标题】:Objective-c doesn't see methods of Swift classObjective-c 看不到 Swift 类的方法
【发布时间】:2019-01-02 12:25:32
【问题描述】:

目前我需要在 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”没有已知的类方法。

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

提前谢谢你!

【问题讨论】:

  • 如果要将整个类公开给objective-c,请在class 旁边使用@objcMembers,在要为单个方法公开的方法旁边使用@objc

标签: objective-c swift class methods


【解决方案1】:

您需要将@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 发生了很大的变化。

【讨论】:

  • @Sh_Khan 在现已删除的评论中,OP 声称此解决方案解决了他们的问题,这就是他们接受它的原因。
【解决方案2】:

你需要导入

#import "productName-Swift.h"

【讨论】:

  • 该项目中是否需要导入main.m?因为我的项目是基于 Swift 的,所以我的 App 委托文件也很快,因此 main.m 不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多