我已经为此苦苦挣扎了几个月了。我找到了很多答案,但到目前为止,没有一个对我有用。
我有一个已经运行了几年的iOS应用程序。它最初是用目标C编写的,然后我添加了一些Swift代码来利用该语言的功能。当我将项目转换为Xcode 8和Swift 3时,它创建了500多个错误,我不得不慢慢清除掉。最终,我只归结为一类错误。Swift类对目标C模块不可见。
现在…我已经用@objc声明了,甚至还确保将这些类声明为public,以防万一。无论如何,这些事情都应该很重要,因为swift类是从NSObject派生的。
这是一个简化的示例;
@interface PDAppDelegate ()
@property (strong, nonatomic, readwrite) PDGameManager *gameManager;
@end
@implementation PDAppDelegate {
NSString * stoppedMusicKey;
}
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[PDAward resetTutorial];
return YES;
}
和
import Foundation
import CoreData
@objc class PDAward: NSManagedObject {
@NSManaged var awardValue: Int16
enum AwardType: Int16 {
case Start = 0, Spin = 1, Water = 2, Treats = 3, Food = 4, Album = 5, Facebook = 101, Ball = 102, Name = 103, Gesture = 201, Weekly = 301, Stop = -1
}
var award: AwardType {
get {
return AwardType(rawValue: awardValue)!
}
set {
awardValue = newValue.rawValue
}
}
@objc class func resetTutorial() {
// reset stuff
}
}
当然,这已大大减少了,但是我希望我已经抓住了问题的所有要素。
让我强调一下,我之前曾使用过此代码。为什么现在不起作用?
我希望我已经抓住了问题的所有要素
你还没有 最重要的是您已省略的事情:Objective-C代码必须导入Swift头文件:
#import "MyModuleName-Swift.h"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句