2016-04-28 13 views
-1

Ich möchte die Daten aus einer Klasseninstanz, die in meinen Swift-Dateien initialisiert ist, in meinen Objective-C-Dateien verwenden. Ich bin ziemlich neu in Objective-C, aber es scheint, dass die Klassen, die ich entweder in .swift oder .m initialisiere, nur von diesem Dateityp aus zugänglich sind.Verwenden Sie die Klasseninstanz von swift in objective-c

Gibt es einen Weg um dies zu umgehen? Wie würde ich im folgenden Beispiel auf Beispielnummer in objective-c zugreifen?

import Foundation 
import UIKit 

public var examp: exampleClass = exampleClass(); //create an instance of class 

@objc public class exampleClass: NSObject { 
var number = 0; 

} 

Falls nicht, gibt es eine Möglichkeit, die .swift-Instanz in die .m-Instanz zu kopieren?

Wenn nicht, gibt es eine Möglichkeit, die Daten aus der .swift-Instanz in etwas anderes zu kopieren und dann in die .m-Instanz zu kopieren?

+0

Globale Swift-Variablen (z. B. 'examp') sind in Objective-C nicht verfügbar, wie in" Verwendung von Swift mit Kakao und Objective-C " –

+0

@MartinR beschrieben. Kann ich meiner .m-Instanz die .swift-Daten geben? Muss ich die .swift-Klasse auf andere Weise initialisieren? – alisikone

+2

Bitte verwenden Sie Großbuchstaben für Klassen/Strukturen/enums/Protokolle. –

Antwort

1

Sie können Ihre examp Instanz von Swift ExampleClass in Ihrem Objective-C-Code verwenden, indem Sie sie an eine Objective-C-Funktion übergeben. Hier ist ein kurzes Beispiel.

Swift Code:

@objc class ExampleClass: NSObject { 
     var number = 123; 

    } 

    var examp: ExampleClass = ExampleClass(); //create an instance of class 

    print("The value of examp.number before the call: \(examp.number)") 
    MyClassObjC.junkfun(examp) // Call Objective-C method that will change ExampleClass.number 
    print("The value of examp.number after the call: \(examp.number)") 

Objective-C-Header, hat dies über den Brückenkopf Swift verfügbar sein:

@class ExampleClass; 

@interface MyClassObjC : NSObject 

+(void)junkfun:(ExampleClass*)ec; 

@end 

Und hier ist die Objective-C-Implementierung (.m) :

#import "cli_swift-Swift.h" // Important: this header is auto-generated; replace cli_swift with 
          // your product name. 

@implementation MyClassObjC : NSObject 

+(void)junkfun:(ExampleClass*)ec 
{ 
    puts("In junkfun"); 
    ec.number = 321; 
} 

@end 

sollte die Ausgabe wie:

The value of examp.number before the call: 123 
In junkfun 
The value of examp.number after the call: 321 

Dies ist nur ein kurzes Beispiel. Weitere Informationen finden Sie unter https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/.

Bitte beachten Sie, dass die Vererbung von NSObject hier wichtig ist.

+0

"Bitte beachten Sie, dass die Vererbung von NSObject hier wichtig ist." Es ist nur wichtig für die Sichtbarkeit des Klassennamens in Objective-C. Die Vererbung von NSObject ist jedoch nicht notwendig, damit das Objekt in Objective-C übergeben und verwendet werden kann. – newacct

Verwandte Themen