Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用Swift类可用的std:vector创建Objective-c类_C++_Objective C_Swift_Std - Fatal编程技术网

C++ 如何使用Swift类可用的std:vector创建Objective-c类

C++ 如何使用Swift类可用的std:vector创建Objective-c类,c++,objective-c,swift,std,C++,Objective C,Swift,Std,如果我试图在我的项目的Swift桥接头中包含一个使用std:vector的objective-C类,那么在我的类中,我会得到以下错误: #import <vector> Error! 'vector' file not found #导入错误!'找不到矢量文件 正在讨论的桥接文件位于我的自定义框架中。如果我没有在桥接头中包含objective-c头,那么所有的编译和工作都很好,但当然我不能从Swift类访问该类 如何在Swift类中使用此objec

如果我试图在我的项目的Swift桥接头中包含一个使用std:vector的objective-C类,那么在我的类中,我会得到以下错误:

#import <vector>                 Error! 'vector' file not found
#导入错误!'找不到矢量文件
正在讨论的桥接文件位于我的自定义框架中。如果我没有在桥接头中包含objective-c头,那么所有的编译和工作都很好,但当然我不能从Swift类访问该类


如何在Swift类中使用此objective-c类?

Swift仅支持桥接到。您需要将任何CPP代码/声明移动到.mm文件中,例如:

Foo.h

#导入
@接口Foo:NSObject
-(b)酒吧;
@结束
Foo.mm

#导入“Foo.h”
#进口
@接口Foo(){
std::vector_数组;
}
@结束
@执行Foo
-(无效)酒吧{
NSLog(@“in bar”);
}
@结束

一个解决方案,如果您必须使用C++ C++/ObjuleC++代码中的C++类,为SWIFT的桥接头创建单独的头文件,并公开您需要的:

Foo.h

#导入
#进口
@接口Foo:NSObject{
标准::向量*_条;
}
@属性(原子,只读)std::vector*bar;
@属性(只读)大小\u t大小;
-(无效)pushInt:(int)val;
-(int)popInt;
@结束

Foo+Swift.h

将其包含在桥接标题中

#导入
#进口
@接口Foo:NSObject
@属性(只读)大小\u t大小;
-(无效)pushInt:(int)val;
-(int)popInt;
@结束
Foo.mm

#导入“Foo.h”
@执行Foo
@合成棒;
-(instancetype)初始化{
if(self=[super init]){
_bar=新的std::vector();
}
回归自我;
}
-(无效)解除锁定{
删除(u栏);;
}
-(无效)pushInt:(int)val{
_杆->推回(val);
}
-(int)popInt{
如果(_-bar->size()==0){
返回-1;
}
自动前=_栏->后();
_条->弹出返回();
返回前线;
}
-(尺寸)尺寸{
返回_-bar->size();
}
@结束
main.swift

<代码>进口基金会 设f=Foo() f、 pushInt(5); f、 普辛特(10); 打印(“大小=\(f.size)”) 打印(\(f.popInt())) 打印(\(f.popInt())) 打印(“大小=\(f.size)”)
Dang!问题是我的方法需要返回std::vectors;因此,它们必须公开。那么我想这是不可能的?这是可能的,但问题是有多困难。你能提供你的问题的MCVE吗?看见Objective-C++类是否有一个返回向量的函数,您只需要读取Swift代码中的值?或者Swift代码是否需要修改
向量
,以便可以在Objective-C++中看到更改?我之所以谈论Objto-C++是因为Objto-C不能使用<代码> STD::vector < /代码>,这是C++类型。@ JeHualAcOk,因为OMNPROG是逃避的,可以将它们暴露在ObjuleC++中,但不能通过SWIFT桥接头。你必须保持多个标题来隐藏C++中的银行代码实现细节。是的,ObjuleC++类有一个返回向量的函数,我需要能够在我的SWIFT代码中引用那个向量。仍然不清楚我如何用上面的答案做到这一点。太奇怪了;当我尝试使用你的第二个例子时,它都编译好了。但是,当尝试以相同的方式设置类时,会出现重复的类错误。对于我的生活,我不知道什么是不同的!有什么想法吗?