Ich spiele gerade mit dem Aufruf von C++ - Methoden aus Swift-Projekt. Ich habe this Tutorial verwendet, um String-Wert zu setzen und zu erhalten, funktionierte perfekt.Swift - Aufruf von C++ - Dateien mit Objective-C-Wrapper - Weitergabe von Int-Werten
Dann habe ich versucht, das gleiche mit Integer-Wert zu tun, und ich stieß auf einige Probleme in meiner Objective-C-Wrapper-Klasse.
#import <Foundation/Foundation.h>
#import "TestCppClassWrapper.h"
#include "TestCppClass.h"
@interface TestCppClassWrapper()
@property TestCppClass *cppItem;
@end
@implementation TestCppClassWrapper
- (instancetype)initWithTitle:(NSString*)title: (NSInteger*)variable
{
if (self = [super init]) {
self.cppItem = new TestCppClass(std::string([title cStringUsingEncoding:NSUTF8StringEncoding]), std::uintptr_t(variable));
}
return self;
}
- (NSString*)getTitle
{
return [NSString stringWithUTF8String:self.cppItem->getTtile().c_str()];
}
- (void)setTitle:(NSString*)title
{
self.cppItem->setTitle(std::string([title cStringUsingEncoding:NSUTF8StringEncoding]));
}
- (NSInteger*)getVariable
{
return [NSInteger self.cppItem->getVariable()];
}
- (void)setVariable:(NSInteger*)variable
{
self.cppItem->setVariable(std::NSInteger(variable));
}
@end
Problem tritt hier, wie Sie
erraten habenIch bin nicht viel vertraut weder mit obj-c noch mit C++, das ist, warum ich nicht in der Lage bin Figur, wie, wie genau sollte ich mit Typen umgehen, String ist ganz individuell Fall (Codierung und Zeug), so ist es schwer für mich, es zu Int beziehen.
#include "TestCppClass.h"
TestCppClass::TestCppClass() {}
TestCppClass::TestCppClass(const std::string &title, const std::int8_t &variable): m_title(title), m_variable(variable) {}
TestCppClass::~TestCppClass() {}
void TestCppClass::setTitle(const std::string &title)
{
m_title = title;
}
void TestCppClass::setVariable(const std::int8_t &variable)
{
m_variable = variable * 2;
}
const std::string &TestCppClass::getTtile()
{
return m_title;
}
const std::int8_t &TestCppClass::getVariable()
{
return m_variable;
}
Vielen Dank im Voraus
Es gibt tatsächlich keine 'NSInteger' Klasse im Namensraum der C++ Standardbibliothek. Was gibt 'TestCppClass :: getVariable' zurück? – molbdnilo
sehe meine bearbeitete Frage bitte :) – DCDC
Kurze Antwort ist nein, Sie können C++ nicht direkt in Swift Code aufrufen. Sie können jedoch einen Objective-C-Wrapper für den C++ - Code erstellen und diesen mit Swift aufrufen. Related post: http://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-c-mm-files?rq=1 –