首页 > 解决方案 > 如何在 Swift 中访问结构指针的属性/成员

问题描述

我在搞乱 Mach-O Headers 和 dyld 并遇到了这个函数_dyld_get_image_header,它返回一个指向动态库的 mach 头的指针。

我想我也许可以通过这篇文章之后的这个指针来访问动态库的 Mach-O 段。但是,我无法访问 Mach-O Headers 的属性并且收到错误消息。在下面的 Swift 代码中,我尝试访问结构的 ncmds 或 load 命令属性,但遇到了错误:

var currentLibrary = 0
// Gets Pointer to Mach Header of First Dynamic Library, Index 0
let libHeader = unsafeBitCast(_dyld_get_image_header(UInt32(currentLibrary)), to: UnsafePointer<mach_header_64>.self)

print(libHeader.ncmds)

错误:

Value of type 'UnsafePointer<mach_header_64>' has no member 'ncmds'

标签: swiftpointersstructdyldmach-o

解决方案


它类似于c,您将在其中使用->运算符 ( libHeader->ncmds),相当于(*libHeader).ncmds. 也就是说,首先引用指针以获取mach_header_64值,然后访问其ncmds字段。

在 Swift 中,这是完全相同的想法,但语法不同:libHeaver.pointee.ncmds


推荐阅读