Swift 2.0 复制 OBJC_ASSOCIATION_RETAIN

2024-01-03

我正在扩展 Swift 2.0 中的一些类以与 ReactiveCocoa 3.0(swift-2.0 分支)一起使用,但遇到了一些麻烦。

我已经关注科林了艾伯哈特的教程 http://blog.scottlogic.com/2015/05/15/mvvm-reactive-cocoa-3.html,并复制粘贴了他的一些UIKit扩展逻辑 https://github.com/ColinEberhardt/ReactiveTwitterSearch/blob/master/ReactiveTwitterSearch/Util/UIKitExtensions.swift转到我的 OS X 应用程序。除了这个属性之外,一切都编译得很好:UInt(OBJC_ASSOCIATION_RETAIN),这给了我以下编译器错误。

使用未解析的标识符

我如何访问该房产?我尝试过import ObjectiveC and #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
    }()
}

这实际上现在作为一个名为的枚举导入到 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, key, associatedProperty, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)

或者使用枚举简写语法。

objc_setAssociatedObject(host, key, associatedProperty, .OBJC_ASSOCIATION_RETAIN)

注意objc_setAssociatedObject也已更新以采取objc_AssociationPolicy论证而不是UInt使得没有必要访问枚举rawValue here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 2.0 复制 OBJC_ASSOCIATION_RETAIN 的相关文章

随机推荐

  • 如何将字符串解析为哈希表

    是否有一种简单 甚至可能是单个命令 的方法可以从包含键值对的字符串构建哈希表 关联数组 JSON 等等 并用给定的分隔符分隔 Example n1 v1 n2 v2 n3 v3 where 是分隔符 应该返回 n1 v1 n2 v2 n3
  • VB6 项目可以使用 .Net .dll

    我有一个VB6项目 我的问题是我可以调用具有项目所有业务规则 来自 VB6 应用程序 的 NET dll 吗 基本上我有一个 VB6 项目 其中有一个调用 vb6 ActiveX dll 的经典 ASP 项目 要求是找出升级应用程序的最佳方
  • MS Word:选择表格单元格内的文本

    我需要在 Word 文档表格的单元格内选择文本 例如 两个字符 下面的代码 Sub testTable For Each itable In ActiveDocument Tables itable Cell 1 2 Range Selec
  • 无法使用 pandas to_sql() 方法将数据插入 Snowflake 数据库表

    我有一个数据库SFOPT TEST在我的雪花实例上 数据库有两种模式AUDITS and PARAMS 架构AUDITS有一个使用 SQLAlchemy 创建的表declarative base class AccountUsageLogi
  • 如何使用 python pandas 读取 json 文件?

    我想使用 python pandas 读取 json 文件 文件的每一行都是一个完整的 JSON 对象 我在下面使用versions 蟒蛇 2 7 6 熊猫 1 19 1 json 文件 id 111 p id 55 name aaa no
  • 播放服务 7.5.0 后无法在 Manifest 中使用 android:icon="@mipmap/ic_launcher"

    我最近使用依赖项更新了播放服务 compile com google android gms play services 7 5 0 我的应用程序图标启动器位于 mipmap ic launcher 但这显示错误AndroidManifes
  • INRIA 是否会向 OCaml 添加并发原语? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我所说的 并发 是指像 Erlang 的 actor 和并发 GC 这样的轻量级进程 旨在使此类进程顺利工作 如果 INRIA 摆脱当前 OCa
  • 枚举案例处理 - 使用开关还是字典更好?

    根据具体情况处理枚举的值时 使用 switch 语句还是字典更好 我认为字典会更快 就空间而言 它占用了一些内存 但是 case 语句也会占用一些内存 只是程序本身所需的内存 所以最重要的是 我认为使用字典总是更好 以下是并排比较的两个实现
  • 如何在reactjs的render方法中使用三元运算符?

    我想使用三元运算符根据某些状态条件渲染两个按钮 以避免代码重复 我想做什么 我有两个基于状态值的按钮 取消 和 开始 load cancel 如果单击 取消 按钮load cancel set to true什么时候load cancel
  • 如果在外部单击则隐藏/切换

    我在这里使用这个模板 http startbootstrap com templates simple sidebar html http startbootstrap com templates simple sidebar html 为
  • 如何在 Android 中安排通知

    我正在尝试在将来的某个时间设置通知 我有创建通知的代码 但找不到安排通知的选项 我如何安排通知 不适用于奥利奥 编辑 上面的答案都很好 但不考虑用户重启设备的可能性 这会清除 AlarmManager 安排的 PendingIntent 您
  • Gradle - 仅在目录中的代码发生更改时才执行任务

    我有一个创建 100MB JAR 的 Gradle 任务 现在我只想将它创建为我的一部分gradle build如果项目内的代码已更改 例如特定的 src目录 所以目前 build gradle kts 看起来像 tasks shadowJ
  • 未收到数据时向 Node.js 流添加“静默帧”

    我正在使用 Node js 创建一个 Discord js 机器人 该机器人在语音通道中记录用户的音频 它加入一个频道并开始分别收听每个用户的声音 它记录到 pcm 文件 因此只有原始数据 现在 这可行了 但 Discord 音频流的性质导
  • CSS 像素可以是分数吗?

    可以CSS吗px是分数吗 标准允许吗 如果是这样 主要浏览器是否支持它 伙计们 让我们用文档来支持答案 是的 您可以指定分数像素 由于从第一个版本开始这就是 CSS 的一部分 因此任何支持 CSS 的浏览器都应该很好地支持它 参考 CSS
  • Azure blob 到 Azure SQL 数据库:无法批量加载,因为无法打开文件“xxxx.csv”。操作系统错误代码5(访问被拒绝。)

    我正在尝试在 azure sql 数据库中批量加载 azure blob 存储中的一些数据 文件内容为 customer age gender C1093826151 4 M C352968107 2 M C2054744914 4 F 该
  • 垂直堆叠 md-chips Angularjs

    我正在 AngularJS 中测试 md chips 指令 有没有办法垂直堆叠 芯片 而不是水平附加芯片 我一直在尝试这里找到的演示 https material angularjs org latest demo chips https
  • .htaccess 重写条件尾部斜杠仅适用于特定目录

    我有一条非常有效的规则 它为我网站上的每个目录添加了一个尾部斜杠 如何仅为某些目录 例如 courses 添加尾部斜杠 我不希望每个目录 路径都有一个尾部斜杠 RewriteCond REQUEST URI RewriteRule http
  • 如何将可选参数传递给 bash 脚本中的另一个命令?

    我正在编写一个 bash 脚本 它接受一些可选参数 我想翻译它们并将它们传递给另一个脚本 但是 我很难优雅地传递可选参数 以下是我设法用伪代码完成的工作的概述 a sh if arg1 in arguments then firstArg
  • 标准 ada 包含路径是什么

    我在使用 apt get 安装的 Ubuntu 上使用 gnat 4 6 我需要知道在哪里安装下载的库 例如APQ http sourceforge net projects apq 我应该设置什么ADA INCLUDE PATH and
  • Swift 2.0 复制 OBJC_ASSOCIATION_RETAIN

    我正在扩展 Swift 2 0 中的一些类以与 ReactiveCocoa 3 0 swift 2 0 分支 一起使用 但遇到了一些麻烦 我已经关注科林了艾伯哈特的教程 http blog scottlogic com 2015 05 15