나는 몇 달 동안 이것으로 어려움을 겪고 있습니다. 많은 답을 찾았지만 지금까지 나를 위해 일한 사람은 없습니다.
몇 년 동안 스토어에있는 작동중인 iOS 앱이 있습니다. 원래 목적 C로 작성되었으며 언어의 기능을 활용하기 위해 Swift 코드를 추가했습니다. 프로젝트를 Xcode 8과 Swift 3로 변환했을 때 500 개가 넘는 오류가 발생하여 천천히 제거해야했습니다. 결국 나는 단지 하나의 오류 클래스에 도달했습니다. Swift 클래스는 객관적인 C 모듈에 표시되지 않습니다.
이제 ... @objc로을 선언했고, 만일을 대비하여 클래스가 public으로 선언되었는지 확인했습니다. 빠른 클래스가 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] 삭제
몇 마디 만하겠습니다