2017-10-28 115 views
0

我正在從Objective-C類調用函數。我從我的Swift類傳遞一個數組到一個Objective-C函數中。將Swift中的NSArray傳遞給Objective-C函數

這裏是我的雨燕

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]; 
+0

至少有兩個StackOverflow問題可以解決這個錯誤。這與Swift無關;它與使用「塊」(Swift中的「閉包」的Objective-C名稱)有關。 [在塊中將變量分配給塊外的變量](https://stackoverflow.com/q/7962721/1107226)和[「變量不可分配(缺少__block類型說明符)」方法中使用變量時出錯在方法塊中聲明](https://stackoverflow.com/q/36573957/1107226) – leanne

回答

0

您正在嘗試塊內修改stringArray功能參數的值,所以你應該告訴給編譯器。你可以嘗試dispatch_sync呼叫這樣的權利之前製作副本:

__block NSArray *stringArrayCopy = [stringArray copy]; 

和該塊中使用複製。

這將消除編譯器錯誤,但請注意,如果您打算通過在ObjC方法內設置stringArray參數來更改Swift videosAutoCompletion陣列,則需要更改方法。設置stringArray = [self.ParsingArray copy];只對本地的 autocompleteSegesstions::: 函數有效。