2017-10-28 12 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]; 

      } 
    } 

    }); 

を持っていたあります次の行のエラー。

変数はラインで

stringArray = [self.ParsingArray copy]; 
+0

このエラーに対処する少なくとも2つのStackOverflow質問があります。 Swiftとは関係ありません。それは "ブロック"(Swiftの "クロージャ"のObjective-Cの名前)を使用することと関係しています。 [ブロック内の変数をブロック外の変数に代入する](https://stackoverflow.com/q/7962721/1107226)、メソッドから変数を使用するときに[変数が割り当てられない(__block型指定子がありません)]エラーメソッドブロック内の宣言](https://stackoverflow.com/q/36573957/1107226) – leanne

答えて

0

(__blockの型指定が欠落しているもの)を割り当て可能ではありませんあなたはブロック内stringArray関数パラメータの値を変更しようとしているので、あなたがすることを教えてくださいコンパイラ。

__block NSArray *stringArrayCopy = [stringArray copy]; 

とブロック内でのコピーを使用して:あなたは、右のようなdispatch_sync呼び出しの前にコピーを作成することを試みることができます。

これはコンパイルエラーを沈黙が、あなたの意図はにObjCメソッド内stringArrayパラメータを設定することで、あなたのスウィフトvideosAutoCompletion配列を変更することであるならば、あなたはあなたのアプローチを変更する必要があることに注意してくださいます。 stringArray = [self.ParsingArray copy];を設定すると、 autocompleteSegesstions::: 機能のローカルにのみ効果があります。

関連する問題