将 NSArray 从 Swift 传递到 Objective-C 函数

Passing an NSArray from Swift into Objective-C function

我正在从 Objective-C class 调用一个函数。我将数组从 Swift class 传递到 Objective-C 函数中。

这是我的 Swift

代码
var videosAutoCompletion:[String] = []

completeSearch.autocompleteSegesstions(searchText, self.tableView, self.videosAutoCompletion)

Objective-C 函数

 -(void)autocompleteSegesstions : (NSString *)searchWish :(UITableView*)table :(NSArray*)stringArray

在 Objective-C 函数中我有一个块

  dispatch_sync(dispatch_get_main_queue(), ^{
        self.ParsingArray = [[NSMutableArray alloc]init]; //array that contains the objects.
        for (int i=0; i != [jsonObject count]; i++) {
            for (int j=0; j != 1; j++) {
                //NSLog(@"%@", [[jsonObject objectAtIndex:i] objectAtIndex:j]);
                [self.ParsingArray addObject:[[jsonObject objectAtIndex:i] objectAtIndex:j]];
                //Parse the JSON here...
                //NSLog(@"Parsing Array - %@",self.ParsingArray);

                stringArray =  [self.ParsingArray copy];
                [table reloadData];

            }
    }

    });

我收到以下行的错误。

Variable is not assignable (missing __block type specifier) at line

 stringArray =  [self.ParsingArray copy];

您正试图在一个块中修改 stringArray 函数参数的值,因此您应该将其告知编译器。您可以尝试在 dispatch_sync 调用之前制作副本,如下所示:

    __block NSArray *stringArrayCopy = [stringArray copy];

并在块内使用副本。

这将消除编译器错误,但请注意,如果您打算通过在 ObjC 方法中设置 stringArray 参数来更改 Swift videosAutoCompletion 数组,则需要改变你的方法。设置 stringArray = [self.ParsingArray copy]; 只对本地有效 autocompleteSegesstions::: 功能。