2017-05-11 25 views
2

我現在有轉換C++載體,Objective-C的

vector<vector<cv::Point>> example; 

,並希望能夠將它傳遞給一個快捷功能,所以我想我應該做它像這樣(或開始有更簡單的方法?):

NSArray[NSArray[Int,Int]] 

cv::Point是兩個int屬性的對象。

我已經試過

NSMutableArray *example1[example.size()]; 
for(i = 0;i< example.size();i++){ 
     if(example[i].size() > 5){ //irrelevant 
      NSMutableArray *second[example[i].size()]; 
      for(int p = 0;p<example[i].size();p++){ 
       NSInteger p1 = example[i][p].x; 
       NSInteger p2 = example[i][p].y; 
       NSInteger point[2] = {p1,p2}; 
       [second addObject: point]; 
      } 
      [example addObject: second]; 
     } 
} 

我已經花費年齡和經常收到不同的數據類型的錯誤,等等。你會怎麼做呢,還是糾正呢?

感謝

+0

如果陣列將足夠大,NSArray的是不是一個好主意,因爲它的速度慢。在Objective-C中,你可以使用原生的''''語言。你沒有想過嗎? –

+0

是的 - 但我需要返回一個Swift函數,所以我認爲Objective-c可以是C++和Swift之間的鏈接。 –

+0

我相信這是你的問題的答案:http://stackoverflow.com/a/36949117/6846532 –

回答

1

您可以使用NSValue到一個簡單的結構存儲到NSMutableArray

NSMutableArray *example1 = [NSMutableArray arrayWithCapacity:example.size()]; 
for(int i = 0;i< example.size();i++){ 
    if(example[i].size() > 5){ //irrelevant 
     NSMutableArray *second = [NSMutableArray arrayWithCapacity:example[i].size()]; 
     for(int p = 0;p<example[i].size();p++){ 
      NSValue *point = [[NSValue alloc] initWithBytes:&example[i][p] objCType:@encode(cv::Point)]; 
      [second addObject:point]; 
     } 
     [example1 addObject:second]; 
    } 
}