Obj-C - 如何将 id 转换为 GLfloat[]

Obj-C - how to cast id into GLfloat[]

我有 NSMutableArrayGLfloat 的简单数组。 这就是我在 Swift:

中构建它的方式
var arrays = NSMutableArray()
for(i=0; i<arraysCount; i++) {
    var array:[GLfloat] = []

    // fill the array

    arrays.appand(array)
}

但是如何在 Objective-C 中通过索引获取我的数组? [arrays objectAtIndex:index] 给了我一个 ID,但是如何将它转换成 GLfloat 数组?

我需要使用 GLfloat 数组,因为必须绘制此数组,我将它们发送到 glBufferData()

在 objective-c 中,您不能向 NSMutableArray 添加简单的 C 类型 NSMutableArray 只能包含 objective-c 对象。因此,调用 [arrays objectAtIndex:index]; 时得到的数组很可能是 NSNumberNSValue 的数组。

在 objective c 中,您可以使用 C 样式数组,例如int myArr[5] = {1,2,3,4,5};NSArrays 但你不能混合使用它们。因此,intNSArray 将是 NSArray *myArr = @[@1,@2,@3,@4,@5],其中 @1NSNumber 对象,intValue 为 1.

因此,要将您的数组转换为 float 的数组,您可以执行以下操作:

float otherArr[(int)myArr.count];
for (int i = 0; i < myArr.count; i++) {
    NSNumber *num = myArr[i];
    otherArr[i] = myArr.floatValue;
}
// Voilia a C style array of floats

这是 Swift 在您到达 objective-c 时可能会混淆的地方,因为我相信这一切都是隐式完成的。