Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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
Ios 在Swift中使用GLKit中的GLKMath_Ios_Swift_Frameworks_Glkit - Fatal编程技术网

Ios 在Swift中使用GLKit中的GLKMath

Ios 在Swift中使用GLKit中的GLKMath,ios,swift,frameworks,glkit,Ios,Swift,Frameworks,Glkit,因此,我正在使用Ray Wenderlich的教程编写的一本名为《iOS游戏》的书,并试图利用其中的一些objective-C代码,使游戏中角色的加速计控制发挥作用。但是,我想使用Swift而不是Objective-C。我在尝试创建GLKVector3类型的变量时遇到了一个问题,它表示一个3D向量。当我输入时: var raw:GLKVector3 = GLKVector3Make(irrelevant stuff) 我得到以下错误: 使用模块GLKVector3作为类型 我在GLKit的sw

因此,我正在使用Ray Wenderlich的教程编写的一本名为《iOS游戏》的书,并试图利用其中的一些objective-C代码,使游戏中角色的加速计控制发挥作用。但是,我想使用Swift而不是Objective-C。我在尝试创建GLKVector3类型的变量时遇到了一个问题,它表示一个3D向量。当我输入时:

var raw:GLKVector3 = GLKVector3Make(irrelevant stuff)
我得到以下错误:

使用模块GLKVector3作为类型

我在GLKit的swift文件顶部有一个导入:

import GLKit

您知道如何从GLKMath文件中获得功能,以便在我的程序中使用吗?

Swift在1.2版中添加了union支持。导入的联合中的字段是只读的,即使是用
var
声明的,但可以根据需要传递给C函数或从C函数传递

Swift 1.2的发行说明意味着这些字段可能根本无法访问,但至少对于
GLKit
类型,这些字段仍然是可读的:

Swift现在可以部分导入包含联合、位字段、SIMD向量类型和Swift本机不支持的其他C语言功能的C聚合。不支持的字段将无法从Swift访问,但是可以在Swift中使用具有这些类型的参数和返回值的C和Objective-C API。这包括基础代码<代码> NSDecimal <代码>类型和<代码> GLKit GLKVector < /代码>和<代码> GLKMask< /Cord>类型,等等。


这里查看我的回复:我实际上为此构建了一个完整的库,所以你不再被迫使用GLKit或等待苹果在swift中实现它。

随着昨天(2015年2月8日)Xcode 6.3/swift 1.2测试版的发布,现在可以使用swift的GLKit了。

这是否意味着我根本不能使用GLKVector3?据我所知,不像今天这么快。他们可能会在未来的版本中实现联合,但我还没有看到任何关于这方面的内容。有关可能的解决方法(创建C函数),请参阅:假设接收器(框架,objc库)已实现联合。@LearnCos2D您尝试过吗?问题是Swift没有桥接
GLKVector3
类型,因此编译器不会识别或允许任何实例。您可以将其包装在objc接口中,该接口将glk结构公开为Swift可以使用的自定义结构。当然,如果您必须直接与使用glkit结构的api接口,尤其是在swift中不可能使用glk结构参数重写方法的子类,那么这就不再有用了。您知道如何传递glk矩阵吗?我试图把它转换成一个不安全的指针,但没有成功。我会喜欢一些指针,因为它是@Gusutafu
var viewProj=glkmatarx4multiply(…)var pData=uniformBuffer.contents()pData.advancedBy(sizeof(glkmatarx4)*inflightBufferIndex)let address=withUnsafePointer(&viewProj){unsafematablepointer($0)}memcpy(pData,address,sizeof(GLKMatrix4))