【问题标题】:Passing an NSArray from Swift into Objective-C function将 NSArray 从 Swift 传递到 Objective-C 函数
【发布时间】:2018-04-09 23:56:27
【问题描述】:

我正在从一个 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];

【问题讨论】:

标签: objective-c swift nsarray block


【解决方案1】:

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

    __block NSArray *stringArrayCopy = [stringArray copy];

并使用块内的副本。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多