我有一点似乎不起作用的 Swift 代码......
// earlier, in Obj C...
typedef struct _Room {
uint8_t *map;
int width;
int height;
} Room;
如果你好奇的话,房间是 Roguelike 游戏的一部分。我正在尝试用 Swift 重写几个部分。这是看起来已损坏的代码,我希望我在评论中做的是:
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 的值不是我所知道的我在 map 上查看的值,已将一个非常简单的位置 (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
关于ios - Swift 指针运算和解引用;将一些类似 C 的 map 代码转换为 Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25833354/