我几个月来一直在努力解决这个问题。我找到了很多答案,但到目前为止还没有一个对我有用。
我有一个有效的iOS应用程序已在商店里存放了好几年。它最初是用目标C编写的,然后我添加了一些Swift代码来利用该语言的功能。当我将项目转换为Xcode 8和Swift 3时,它创建了500多个错误,我不得不慢慢清除它们。最终我只得到了一类错误;客观C模块不能看到Swift类。
现在......我已经用@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
}
}
当然,这已经大大削减了,但我希望我已经抓住了问题的所有要素。
让我强调一下我之前有过这段代码。为什么它现在不起作用?
答案 0 :(得分:1)
我希望我已经捕获了问题的所有元素
你没有。最重要的是你省略的东西:Objective-C代码必须导入Swift头:
#import "MyModuleName-Swift.h"
答案 1 :(得分:1)
您需要包含一个头文件,以便您的Objective-C和Swift代码协同工作。而且您还必须将所有.h OBJ-C文件导入其中。
以下是一些可以帮助您的信息。 http://www.learnswiftonline.com/getting-started/adding-swift-bridging-header/