加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 调用 objc/runtime OBJC_ASSOCIATION_RETAIN

发布时间:2020-12-14 01:36:39 所属栏目:百科 来源:网络整理
导读:我扩展一些类在 Swift 2.0 工作与 ReactiveCocoa 3.0 (swift 2.0 分支),但遇到了一些问题。 我跟随科林 ·艾伯哈特的教程,和有复制粘贴一些他UIKit 扩展逻辑结束对我的 OS X 应用程序。它所有的编译很好,除了此属性: UInt(OBJC_ASSOCIATION_RETAIN) ,这

我扩展一些类在Swift2.0 工作与 ReactiveCocoa 3.0 (swift 2.0 分支),但遇到了一些问题。

我跟随科林 ·艾伯哈特的教程,和有复制粘贴一些他UIKit 扩展逻辑结束对我的 OS X 应用程序。它所有的编译很好,除了此属性:UInt(OBJC_ASSOCIATION_RETAIN),这给了我以下的编译器错误。

使用的未解析的标识符

如何访问此属性?我一直对import ObjectiveC#import <objc/runtime.h>头文件,但没有什么似乎工作。

func lazyAssociatedProperty<T: AnyObject>(host: AnyObject,key: UnsafePointer<Void>,factory: ()->T) -> T {
    return objc_getAssociatedObject(host,key) as? T ?? {
        let associatedProperty = factory()

        objc_setAssociatedObject(host,key,associatedProperty,UInt(OBJC_ASSOCIATION_RETAIN)) // <-- Use of unresolved identifier
        return associatedProperty
    }()
}

解决方法 1:

这是实际上现在导入Swift作为枚举命名为objc_AssociationPolicy。定义:

enum objc_AssociationPolicy : UInt {
    case OBJC_ASSOCIATION_ASSIGN
    case OBJC_ASSOCIATION_RETAIN_NONATOMIC
    case OBJC_ASSOCIATION_COPY_NONATOMIC
    case OBJC_ASSOCIATION_RETAIN        
    case OBJC_ASSOCIATION_COPY
}

用于如下的含义。

objc_setAssociatedObject(host,objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)

或与枚举速记语法。

objc_setAssociatedObject(host,.OBJC_ASSOCIATION_RETAIN)

请注意,objc_setAssociatedObject也已更新,采取objc_AssociationPolicy参数来代替UInt使它没有必要再访问枚举的rawValue在这里。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读