Swift指针运算和去引用;将一些类似C的映射代码转换为Swift



我有一点Swift代码似乎不起作用。。。

// earlier, in Obj C...
    typedef struct _Room {
        uint8_t *map;
        int width;
        int height;
    } Room;

如果你好奇的话,《房间》就是对流氓游戏的一种尝试。我正试图改写斯威夫特的几个部分。以下是似乎已损坏的代码,以及我希望作为评论所做的:

let ptr = UnsafePointer<UInt8>(room.map) // grab a pointer to the map out of the room struct
let offset = (Int(room.width) * Int(point.y)) + Int(point.x) // calculate an int offset to the location I am interested in examining
let locationPointer = ptr + offset // pointer advances to point to the offset I want
var pointValue = ptr.memory // What I used to get with *ptr

这里出现了问题,因为简单的测试显示pointValue的值不是我所知道的,我已经将一个非常简单的位置(1,1)设置为已知值。很明显,Swift不应该做这种事情,但这是一种转换,目的是在我足够熟悉语法的情况下学习Swift的方式。

我预计错误在swift代码中,因为这一切都在目标C版本中工作。错误在哪里?

您正在分配locationPointer以指向新位置,但在下一行中仍使用ptr,并且ptr的值尚未更改。将最后一行更改为:

var pointValue = locationPointer.memory

或者您可以将指针更改为var并将其提前:

var ptr = UnsafePointer<UInt8>(room.map) // grab a pointer to the map out of the room struct
let offset = (Int(room.width) * Int(point.y)) + Int(point.x) // calculate an int offset to the location I am interested in examining
ptr = ptr + offset // pointer advances to point to the offset I want
var pointValue = ptr.memory // What I used to get with *ptr

最新更新