2017-03-17 102 views
0

我只想知道如何通過引用將數據從Swift類傳遞到Objective C類。我有使用inout關鍵字引用Swift Swift的想法。但是由於ObjC使用指針本身作爲對象名稱。我如何通知Swift通過引用來傳遞對象而不是Value?通過引用ObjectiveC方法的Swift傳遞數組

代碼Snipshot

斯威夫特:

class CheckReference: NSObject {  
    class func test() { 

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

目標C:

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

編輯: 爲SWIFT它通過更改方法爲:不過還是Objective C的相互作用不管用。

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

如果你想發送到obj-c函數 – Tj3n

+0

,只要將它轉換爲「NSMutableArray」,即使也嘗試過。它更新的問題 – Saad

+0

它仍然通過它的價值。 – Saad

回答

1

好了,所以我的猜測是,當你路過nil,你是不是傳遞一個指針,因爲它沒有指向任何東西,所以你以後該值,不會改變。

如果你想通過nil,您可能需要更改函數返回一個指向新NSMutableArray,並在您的SWIFT代碼分配回array

創建array首先在斯威夫特和傳遞給Obj- c確保對象已經創建並傳遞了合適的指針

+0

解決了我的問題,但Objective C如何處理零指針並返回對象?例如傳遞一個NSError = nil對象並獲得一個有效的內存獲取對象? – Saad

+0

'NSError'處理更像'inout',當你需要鉤住'NSError'變量時,記住'&'?檢查[this](http://stackoverflow.com/questions/13061381/what-does-error-mean-in-objective-c)可能有助於理解,對於其他情況,我認爲它只是swift和obj-c之間的不同編譯器相互對抗 – Tj3n