Swift Pass数组通过引用ObjectiveC方法

时间:2017-03-17 11:42:36

标签: objective-c swift swift3

我只是想知道如何通过引用将数组从Swift类传递给Objective C类。我使用inout关键字通过引用了解Swift to Swift。但是因为ObjC使用指针本身作为对象名称。我怎样才能告知Swift通过引用传递对象而不是Value?

Code 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)
}

1 个答案:

答案 0 :(得分:1)

好吧所以我的猜测是,当你传递nil时,你没有传递指针,因为它没有指向任何东西,因此你之后的值不会改变。

如果您想传递nil,则可能需要更改该函数以返回指向新NSMutableArray的指针,并在快速代码中分配回array

首先在Swift中创建array并传递给Obj-c,确保已创建对象并传递正确的指针