Ios 快速指针算法和解引用;将一些类似C的映射代码转换为Swift

Ios 快速指针算法和解引用;将一些类似C的映射代码转换为Swift,ios,pointers,swift,dereference,Ios,Pointers,Swift,Dereference,我有一点点的Swift代码,似乎不起作用 // earlier, in Obj C... typedef struct _Room { uint8_t *map; int width; int height; } Room; 如果你好奇的话,一个房间就是一个类似流氓的游戏的一部分。我正试图重写Swift中的几个部分。下面是看起来已损坏的代码,以及我希望作为注释所做的操作: let ptr = UnsafePointer<UI

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

// earlier, in Obj C...
    typedef struct _Room {
        uint8_t *map;
        int width;
        int height;
    } Room;
如果你好奇的话,一个房间就是一个类似流氓的游戏的一部分。我正试图重写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
let ptr=UnsafePointer(room.map)//从room结构中获取指向映射的指针
让offset=(Int(room.width)*Int(point.y))+Int(point.x)//计算到我感兴趣的位置的Int偏移量
让locationPointer=ptr+offset//指针前进到指向我想要的偏移量
var pointValue=ptr.memory//我用*ptr得到的
这里有点不对劲,因为简单的测试显示pointValue的值不是我在地图上看到的值,我已经将一个非常简单的位置(1,1)设置为一个已知值。很明显,斯威夫特不应该做这种事情,但这是一种转换,目的是在我对语法足够了解的情况下学习斯威夫特的方法


我认为错误在swift代码中——因为这都是在objective 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
var ptr=UnsafePointer(room.map)//从room结构中获取指向映射的指针
让offset=(Int(room.width)*Int(point.y))+Int(point.x)//计算到我感兴趣的位置的Int偏移量
ptr=ptr+offset//指针前进到指向我想要的偏移量
var pointValue=ptr.memory//我用*ptr得到的

+1表示问题非常明确。为什么投反对票?不要在没有评论的情况下否决投票。这对任何人都没有帮助。啊!这就是你因编程迟到而犯的错误。谢谢,我稍后会尝试并接受。或者,您可以使用
MemoryLayout.size
代替
(Int(room.width)*Int(point.y))+Int(point.x)
@isnullxbh,我认为
\u room
结构的大小无关紧要。此计算需要根据
room.width
的值以及正在访问的特定
point.x
point.y
的值而变化。@vacawama,是的,当然,你是对的。对不起:)