Swift 调用 objcruntime OBJC_ASSOCIATION_RETAIN

Swift 调用 objcruntime OBJC_ASSOCIATION_RETAIN,第1张

概述我扩展一些类在 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在这里。

总结

以上是内存溢出为你收集整理的Swift 调用 objc/runtime OBJC_ASSOCIATION_RETAIN全部内容,希望文章能够帮你解决Swift 调用 objc/runtime OBJC_ASSOCIATION_RETAIN所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1082235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存