2017-06-18 170 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,则应该手动创建它。