2017-03-17 8 views
0

Ich möchte nur wissen, wie ich ein Array von Swift-Klasse zu Objective-C-Klasse als Referenz übergeben kann. Ich habe eine Idee für Swift nach Swift per Referenz unter Verwendung inout Schlüsselwort. Aber wie ObjC selbst Zeiger als Objektnamen verwendet. Wie kann ich Swift informieren, das Objekt als Referenz anstelle von Value zu übergeben?Swift Pass-Array nach ObjectiveC-Methode

-Code Snipshot

Swift:

class CheckReference: NSObject {  
    class func test() { 

     let array : NSMutableArray! = nil 
     ViewController.change(array) //ViewController.change(&array) doesn't work 
     print(array)//does not changed 
    } 
} 

Objective C:

+ (void)changeArray:(NSMutableArray *)array 
{ 
    if(!array)  
     array = [NSMutableArray array]; 
    [array addObject:@(2)]; 
} 

Edit: Für rasche es funktioniert nach Methoden, wie verändert sich: Aber noch Objective C-Interaktion funktioniert nicht.

class func test() { 
    var array : NSMutableArray! = nil 
    CheckReference.passByReference(arr: &array) 
    print(array ?? "nothing")//prints 2 

} 
class func passByReference(arr: inout NSMutableArray!) 
{ 
    arr = NSMutableArray() 
    arr.add(2) 
} 
+0

Konvertieren Sie es einfach in 'NSMutableArray', wenn Sie an obj-c-Funktion – Tj3n

+0

senden möchten, auch dies versucht. Aktualisierte Frage – Saad

+0

übergibt es immer noch nach Wert. – Saad

Antwort

1

Okay, so meine Vermutung ist, dass, wenn Sie nil sind vorbei, Sie werden einen Zeiger nicht vorbei, da sie nicht auf etwas zeigen, was Ihren Wert danach, verändert sich nicht.

Wenn Sie nil übergeben möchten, können Sie die Funktion ändern müssen einen Zeiger auf neue NSMutableArray zurückzukehren und wieder auf das array in Ihrem SWIFT-Code

array erstellen zuerst in Swift und passieren zu Obj- c Stellen Sie sicher, dass das Objekt erstellt wurde und den richtigen Zeiger übergeben

+0

Mein Problem gelöst, aber wie Objective C behandelt dann Null Zeiger und gibt Objekte in ihm zurück ??? z.B. ein NSError = nil-Objekt übergeben und ein gültiges Speicherobjekt erhalten? – Saad

+0

'NSError' Behandlung ist mehr wie 'inout', erinnern Sie sich an die' & ', wenn Sie die' NSError' Variable haken müssen? Check [this] (http://stackoverflow.com/questions/13061381/what-does-error-mean-in-objective-c) könnte helfen, zu verstehen, für andere Fälle denke ich, es ist nur der Unterschied zwischen swift und obj-c Compiler gegeneinander – Tj3n