От месеци се боря с това. Намерих много отговори, но досега нито един не ми помогна.
Имам работещо приложение за iOS, което е в магазина от няколко години. Първоначално беше написан на object 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
}
}
Разбира се, това е силно съкратено, но се надявам, че съм уловил всички елементи на проблема.
Нека подчертая, че имах този код работещ преди. Защо сега не работи?