2017-06-18 171 views
1

是否可以將NSMutableArray的內容轉換爲std :: vector?如果是這樣,這應該在Objective-C或C++代碼中完成嗎?NSMutableArray to std :: vector

+0

是的,這是可能的。你可以在可變數組中的每個元素上使用一個橋接類型轉換爲void指針,並將其存儲在'std :: vector'中。例如:https://stackoverflow.com/questions/7298912/convert-nsdictionary-to-stdvector?rq=1它當然必須在Objective-C++ .mm文件中完成。 – Brandon

+0

非常感謝。您的意見已經能夠讓我開始。 – Pibomb

+0

@Brandon,很抱歉,您可以使用Objective-C++的模板來創建任何Objective-C類型的規範。例如:std :: set ,std :: vector <__ weak NSObject *>。第二個容器將存儲弱引用。 –

回答

1

您可以使用任何Objective-C類型創建一個向量。
例如一個NSString的實例存儲到一個載體,可以使用下面的代碼:

NSMutableArray<NSString*>* array = [@[@"1", @"2"] mutableCopy]; 

    __block std::vector<NSString*> vectorList; 
    [array enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
     vectorList.push_back(obj); 
    }]; 

    for (std::vector<NSString*>::const_iterator iterator = vectorList.cbegin(); iterator != vectorList.cend(); iterator++) 
    { 
     NSLog(@"%@", *iterator); 
    } 

你應該在Objective-C++文件中使用它,因爲C++沒有與毫米的Objective-C(文件語法延期)。

如果您需要將NSMutableArray中的數據轉換爲不同的表示形式,例如,將NSNumber轉換爲int或將NSString轉換爲std :: string,則應該手動創建它。