将 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:::
功能。
我正在从 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:::
功能。