2017-08-07 58 views
1

我有一個名爲photoArray的對象數組,它有屬性日期和索引。我可以訪問像photoArray [arrayIndex] .index/photoArray [index] .date。 我是C++開發人員,所以我將所有的邏輯編碼在C++中。我想將這些對象從Swift傳遞給C++。我已經創建了C++類和它的頭文件。然後我創建了Objective-C中的C++包裝類,並在頭文件中定義了它。還創建了橋接頭。

我的問題 - 我的CPP-wrapper.mm中的代碼片段應該如何,就像我對字符串所做的一樣。另外什麼應該是我的CPP.cpp類中的數據類型?
我的目標是從C++打印這個photoArray。讓我知道是否有可能這樣做或需要澄清。

ViewController.swift如何將數組對象從swift/objective-c傳遞並轉換爲C++?

import UIKit 
class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let world = " passed as string" 
    CPP_Wrapper().hello_cpp_wrapped(world) 
    getPhotos() 

func getPhotos() { 
    let photoLibraryAccess = PhotoLibraryAccess(); 
    photoLibraryAccess.authenticate { 
    let photoArray = photoLibraryAccess.getPhotos()  
    CPP_Wrapper().eventclassification_cpp_wrapped(photoArray) // pass to c++} }} 

CPP.cpp

void CPP::hello_cpp(const std::string& name) { 
      cout << "Hello " << name << " in C++" << endl; } 
void CPP::event_classification(const int * objectArray){ 
//  instead of int it should be name of class ? 
      cout<<objectArray[1]; } 

CPP-Wrapper.mm

@implementation CPP_Wrapper 
- (void)hello_cpp_wrapped:(NSString *)name { 
     CPP cpp; 
     cpp.hello_cpp([name cStringUsingEncoding:NSUTF8StringEncoding]);} 

- (void)event_classification_cpp_wrapped:(NSArray *)eventArray { 
     CPP cpp; 
     cpp.hello_cpp() // what should be the conversion code? } 
    @end 

PhotoLibraryAccess.h

@interface PhotoIndexDate : NSObject 
    @property (nonatomic, assign) NSUInteger index; 
    @property (nonatomic, copy, nonnull) NSString * date; 
@end 

@interface PhotoLibraryAccess : NSObject 
    - (void)authenticate:(void (^ _Nonnull)())completion; 
    - (nonnull NSArray <PhotoIndexDate *> *)getPhotos; 
@end 

回答

0

這裏的問題在於,您的照片類型PhotoIndexDate是不能在C或C++中使用的Objective-C類型。以下是一些選項:

  • 使用C結構來保存關於照片的信息。該結構可用於Swift,Objective-C和C++中的 。不過,在Swift中使用這些結構的數組可能有點棘手。

  • 使用NSArray <PhotoIndexDate *>存儲照片像你這樣 現在,但在 event_classification_cpp_wrapped建立C/C++從中對象的C數組,並將其發送到C++ 分類方法。

  • 與前一個選項類似,但不是構建C/C++對象的數組 並將其發送給C++,而是遍歷數組,然後從中創建C/C++照片對象並將其發送給C++一個 時間。

您選擇哪個選項取決於一些事情,如:

  • 是否要更改在C++使得 變化是顯而易見的回光陣的Objective-C或SWIFT代碼?
  • 您是否介意在 C++中創建整個Swift/Objective-C數組的副本?從內存使用的角度來看它可以嗎?
+0

謝謝@OmniProg。有用。我在CPP.cpp中創建了類eventObject,它持有日期和索引的數組。然後創建類實例來存儲來自CPP-Wrapper的photoArray – Viral

相關問題