2014-07-09 13 views
13

Stworzyłem projekt testowy, aby wypróbować Swift. Ale utknąłem na importowaniu klasy Swift do klasy Objective-C. Nazwa projektu to "TestSwift1". I ustawiłem Define Module in Packaging na YES. XCode-Beta3Używanie klasy Swift w Objective c. Błąd niezadeklarowanego identyfikatora

mam następny kod:

//swift SwtClass.swift 
import Foundation 

class SwtClass 
{ 
    var title = "" 
} 
//Objective-C ObjClass.h 

@interface ObjClass : NSObject 

@property (nonatomic, strong) NSString* title; 

@end 

//Objective-c ObjClass.m 
#import <Foundation/Foundation.h> 
#import "ObjClass.h" 
#import <testSwift1-Swift.h> 

@implementation ObjClass 

- (void)doSomething 
{ 
     SwtClass* b; // Error: "Use of undeclared identifier 'SwtClass'" 
        // Error: "Use of undeclared identifier 'b'" 

     NSLog(@"something is done"); 
} 

@end 

Odpowiedz

13

Pisząc to pytanie mam znaleźć rozwiązanie. I jak zwykle było to bardzo proste, ale za chwilę może to uratuje kogoś kilka minut.

Aby korzystać Swift klasę (czyli nie jest podklasą z NSObject) w Objective-C, nie zapomnij zaznaczyć go @objc jak to powiedział tutaj "Using Swift from Objective-C". Moja klasa Swift musiała wyglądać tak:

//swift SwtClass.swift 
import Foundation 

@objc class SwtClass 
{ 
    var title = "" 
} 
+4

Jeśli utworzysz 'SwtClass' podklasę' NSObject', wówczas zostanie podany '@ objc'. Jest to rzadki przypadek, gdy masz klasę, która nie dziedziczy z klasy ObjC (przynajmniej obecnie). – Jack

+0

Dzięki, edytowałem moją odpowiedź zgodnie z twoją wzmianką. –

+0

@ Vitaliy1 Nie powinieneś był usuwać pytania podczas przesyłania do NSManagedObjectId, może to być pomocne dla innych. Możesz go odzyskać. – Teejay

Powiązane problemy