gpt4 book ai didi

ios - 将计算属性从类别转换为 Swift 扩展

转载 作者:行者123 更新时间:2023-11-29 02:02:59 26 4
gpt4 key购买 nike

我有以下 Objective-C 类别:

@implementation UINavigationBar (Awesome)
static char overlayKey;
static char emptyImageKey;

- (UIView *)overlay
{
return objc_getAssociatedObject(self, &overlayKey);
}

- (void)setOverlay:(UIView *)overlay
{
objc_setAssociatedObject(self, &overlayKey, overlay, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end

我尝试将其转换为 Swift 扩展,如下所示:

var AssociatedObjectHandle: UInt8 = 0

extension UINavigationBar {

var overlay:UIView! {
get {
return objc_getAssociatedObject(self, &AssociatedObjectHandle) as! UIView
}
set(newValue) {
objc_setAssociatedObject(self, &AssociatedObjectHandle, newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
}

}

}

这看起来很奇怪,因为我创建了一个全局变量 AssociatedObjectHandle 并且我不确定角色实际上做了什么?

这是转换计算属性的正确方法吗?

最佳答案

您问:“这是翻译计算属性的正确方法吗?”

呃,不。

您所做的不是翻译计算属性。看起来您正在使用关联对象来模拟扩展中的存储属性。

如果这是您的意图(将存储的属性添加到您的 UINavigationBar 扩展),那么您发布的代码应该可以工作。

AssociatedObjectHandle 变量是使关联值存储起作用的某种“魔法”。您必须传入一些唯一变量的地址,该变量告诉 Objective-C 运行时在为您的类获取/设置关联值时使用什么键。您只需创建一个静态变量并在获取/设置关联值调用中使用它的地址。

关于ios - 将计算属性从类别转换为 Swift 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com