2017-03-17 93 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