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

时间:2017-10-28 14:43:56

标签: objective-c swift nsarray block

我从Objective-C类调用一个函数。我将一个数组从我的Swift类传递给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];

            }
    }

    });

我收到以下行的错误。

  

变量不可分配(缺少__block类型说明符)   在线

 stringArray =  [self.ParsingArray copy];

1 个答案:

答案 0 :(得分:0)

您正在尝试修改块中stringArray函数参数的值,因此您应该将其告知编译器。您可以尝试在dispatch_sync电话之前制作副本:

    __block NSArray *stringArrayCopy = [stringArray copy];

并使用块内的副本。

这会使编译器错误无效,但请注意,如果您打算通过在ObjC方法中设置videosAutoCompletion参数来更改Swift stringArray数组,则需要更改方法。设置stringArray = [self.ParsingArray copy];仅对本地具有影响 autocompleteSegesstions::: 功能。