【发布时间】:2023-04-02 16:33:01
【问题描述】:
我正在尝试在 macOS 上的 Swift 中访问 MKMapSnapshotter 的私有实例变量 _lodpiSnapshotCreator 和 _hidpiSnapshotCreator。
感谢 class-dump,我知道他们在那里 (see here):
@interface MKMapSnapshotter : NSObject
{
[...]
VKMapSnapshotCreator *_lodpiSnapshotCreator;
VKMapSnapshotCreator *_hidpiSnapshotCreator;
}
但无论我做什么,我都无法抓住它们。
这是我检查是否可以访问它们的方式:
let snapshotter = MKMapSnapshotter(options: snapshotOptions)
let varNames = ["_lodpiSnapshotCreator", "_hidpiSnapshotCreator"]
for varName in varNames {
if let testIVar = class_getInstanceVariable(MKMapSnapshotter.self, varName) {
if let test = object_getIvar(snapshotter, testIVar) as? VKMapSnapshotCreator {
print(test)
} else {
print("Got ivar, but \(varName) is still nil (getInstanceVariable)")
}
} else {
print("\(varName) is nil (getInstanceVariable)")
}
}
奇怪的是,class_getInstanceVariable 不会返回 nil,但 object_getIvar 会。
Got ivar, but _lodpiSnapshotCreator is still nil (getInstanceVariable)
Got ivar, but _hidpiSnapshotCreator is still nil (getInstanceVariable)
我在这里束手无策。我可以通过 Google 找到的只是人们推荐使用 class_getInstanceVariable(我已经在使用)和 key-value-coding(根本不起作用)。
这一定是以前做过的。谁能帮帮我?
编辑:到目前为止,我已经尝试过:
@interface MKMapSnapshotter() {
@public VKMapSnapshotCreator *_lodpiSnapshotCreator;
@public VKMapSnapshotCreator *_hidpiSnapshotCreator;
}
@end
编译成功,但是在尝试使用它时,Swift 一直坚持认为成员 _lodpiSnapshotCreator 和 _hidpiSnapshotCreator 不存在。
【问题讨论】:
-
我不知道您要对这些变量做什么,但为
MKMapSnapshotter类编写扩展可能会更容易 -
转到 MKMapSnaphotter 并为要访问的变量创建 getter 和 setter 方法。
-
@AgentSmith 尝试访问我的 getter 方法会导致 [MKMapSnapshotter _hidpiSnapshotCreator]: unrecognized selector sent to instance。
-
我想扩展也行不通,我打算写一个测试分机来查看所有内容,但我找不到提到这些
lodpiSnapshotCreator或hidpiSnapshotCreator...无论如何,在 iOS 中看到 dpi 有点奇怪,我通常只在 Android 项目中看到这些 -
@JacobBoyd 这是针对 macOS 的。我可能应该在问题中说,哎呀
标签: objective-c swift macos instance-variables access-modifiers