Я боролся с этим уже несколько месяцев. Я нашел много ответов, но пока ни один из них не работал для меня.
У меня есть работающее iOS-приложение, которое пролежало в магазине несколько лет. Первоначально он был написан на языке Objective C, а затем я добавил немного кода Swift, чтобы использовать возможности языка. Когда я преобразовал проект в Xcode 8 и Swift 3, он создал более 500 ошибок, которые мне пришлось медленно отсеивать. В конце концов я дошел только до одного класса ошибок; Классы Swift не видны для объективных модулей C.
Теперь… я объявил с @objc, и я даже убедился, что классы были объявлены как общедоступные, на всякий случай. Эти вещи в любом случае должны были иметь значение, поскольку классы 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
}
}
Конечно, это сильно урезано, но я надеюсь, что уловил все элементы проблемы.
Позвольте мне подчеркнуть, что этот код работал у меня раньше. Почему это не работает сейчас?