首页 > 解决方案 > 如何将 C++ 矢量数据导入 Swift

问题描述

我有一个由 Swift 调用的 C++ 函数,我需要返回 UIIMage 的向量std::vector<UIImage *>。唯一的问题是我不知道如何检索向量的值。

C++ 文件 1:

//  OpenCVWrapper.h

#import <UIKit/UIKit.h>

@interface OpenCVWrapper : NSObject

+(???) convert:(UIImage *) image;

@end

文件 2:

//  OpenCVWrapper.mm
#import "OpenCVWrapper.h"
#import <opencv2/opencv.hpp>
#import <opencv2/imgcodecs/ios.h>

class Converter {
public:
    UIImage *image;        
    std::vector<UIImage *> main() {

        // run code 

        return finalImage;
    };

};

@implementation OpenCVWrapper

+(std::vector<UIImage *>) convert:(UIImage *)image {
    Converter converter;
    converter.image = image;
    std::vector<UIImage *>newImage = converter.main();

    return newImage;

}

@end

迅速:

var multipleImages = OpenCVWrapper.convert(originalImage) //want array

我知道 Swift 不导入 c++ 数据结构,我希望从向量中提取值。

提前致谢。

标签: c++swiftvector

解决方案


你不能std::vector从 Swift 中使用,所以不要返回std::vector.

由于您的向量包含的实例UIImage,只需返回一个NSArray

+ ( NSArray< UIImage * > * )convert: ( UIImage * )image
{
    Converter converter;
    converter.image = image;

    NSMutableArray * images = [ NSMutableArray new ];

    for( auto i: converter.main() )
    {
        [ images addObject: i ];
    }

    return images;
}

推荐阅读