提问人:mypersonalaccount 提问时间:7/25/2018 更新时间:5/10/2019 访问量:1519
Objective-c 看不到 Swift 类的方法
Objective-c doesn't see methods of Swift class
问:
目前我需要在 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”没有已知的类方法。
有人可以解释错误在哪里。 我按照这里的解释做了所有事情,但它不起作用。希望有人能帮助我
先谢谢你!
答:
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 声称该解决方案解决了他们的问题,这就是他们接受它的原因。
评论
@objcMembers
class
@objc