当拥有 @objcMembers 私有动态变量时 @objc 冗余?

2024-03-26

因此,我将 Realm 与 Swift 结合使用,并使用 @objcMembers 关键字标记我的类,但是当我尝试创建一些私有变量时,Xcode 强制我在这些私有变量旁边添加 @objc。这是有意的行为吗?看来这对我来说是多余的。

@objcMembers class MyObject: Object {
    @objc dynamic private var text: String = String()
    @objc dynamic private var youtubeLink: String = String()
    @objc dynamic private var count: Int = 0
    dynamic var isFavorite: Bool = false
    dynamic var currentCount: Int = 0
}

问题是,虽然@objMembers让您的成员接触 Objective-C,private再次隐藏它们。因此,要撤销隐藏,你必须说@objc明确地。

要验证这是真的,请尝试以下测试:

@objcMembers class MyObject: NSObject {
    func f() {
        print("howdy")
    }
}
let c = MyObject()
c.perform(Selector("f"))

这样可行。但这会崩溃:

@objcMembers class MyObject: NSObject {
    private func f() {
        print("howdy")
    }
}
let c = MyObject()
c.perform(Selector("f"))

修复崩溃而不删除private,我们必须暴露f显式地传递给 Objective-C:

@objcMembers class MyObject: NSObject {
    @objc private func f() {
        print("howdy")
    }
}
let c = MyObject()
c.perform(Selector("f"))

关于您的特定情况唯一有趣的事情是编译器noticed问题,而不是像上面第二个例子那样让你崩溃。那是因为dynamic标记,除非我们接触过 Objective-C,否则这是没有意义的。

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

当拥有 @objcMembers 私有动态变量时 @objc 冗余? 的相关文章

随机推荐

  • OptaPlanner - 实体从未添加到此 ScoreDirector 错误中

    我正在 OptaPlanner 中实现一种类似于 NurseRoster 的算法 我需要在 drools 中实施一条规则来检查是否Employee工作天数不能超过他的工作天数contract 由于我不知道如何在 drools 中实现这一点
  • 尝试嵌入小程序时出现 java.lang.NoClassDefFoundError

    所以我为我认识的一个孩子编写了贪吃蛇游戏的代码 但这个该死的东西不会将自己嵌入到 html 中 我确信该类文件与以下目录位于同一目录中snake html 但它仍然拒绝运行 它总是回复 java lang NoClassDefFoundEr
  • 如何测试使用react-spring的react组件?

    我正在尝试测试我的 SpringComponent 该组件使用反应弹簧 https www react spring io 用于动画 当我运行测试时 出现以下错误 玩笑遇到了意想不到的令牌 如果我评论我的 Spring 代码 错误就会消失并
  • 事件侦听器触发错误的目标/函数在错误的时间执行[重复]

    这个问题在这里已经有答案了 我遇到了一个事件侦听器问题 它在错误的对象上触发 要查看它 请单击 Min 下方数字的一个 td 完整的js代码如下 var minedit document getElementsByClassName min
  • Android Sqlite 问题

    我正在尝试实现一个在以下位置找到的 SQLite 示例安卓10 http www android10 org index php articlesdatastorage 235 creating and using databases in
  • 如何使用一个简单的命令将大量变量附加到一个变量

    我想将所有变量粘贴到一个变量中 A blah AA blah2 AAA blah3 AAB blah4 AAC blah5 lets pretend theres 100 more of these Variable composition
  • Google App Engine 中通道池的最佳方法

    似乎使 GAE Channel API 在财务上可行的唯一方法是实施某种池化机制 当我向他们发送有关过高价格的电子邮件时 一位高级应用程序引擎产品经理甚至告诉我这一点 以重用尚未使用的渠道已到期 我一直在集思广益地讨论实现通道池的方法 地点
  • 如何使用 JMeter 将 application/x-www-form-urlencoded 参数发送到 RestServer?

    我开发了一个休息服务器 并将其在本地主机中运行 我尝试使用 JMeter 执行测试 发送请求帖子和获取 取决于调用的方法 我已经发送到 Rest 服务器并使用 JMeter 在简单的 post 请求 获取请求 通过 post 发送文件以及通
  • 活动目录与 OpenLDAP

    LDAP 协议的这两种实现之间的主要区别是什么 异构环境哪个更好 关于这个主题有什么好的网站吗 以下是我立即知道的一些差异 OpenLDAP 可以称为通用 LDAP 服务器 类似于许多其他供应商的 LDAP 服务器 Fedora DS 38
  • Pandas 替换所有列名称中的一个字符

    我的数据框的列名称 来自 csv 文件 包含 and 我想将它们替换为 我怎样才能对所有列进行此操作 Use str replace http pandas pydata org pandas docs stable generated p
  • 如何将 WPF DataGrid 绑定到可变数量的列?

    我的 WPF 应用程序生成的数据集每次可能具有不同的列数 输出中包含对将用于应用格式设置的每列的描述 输出的简化版本可能类似于 class Data IList
  • Cell Swift 中的 UITextView

    我已经搞乱这些限制几个小时了 但无法弄清楚这一点 我的文本视图需要动态单元格高度 正如你所看到的 它与我的时间戳重叠 截至目前 我对时间戳的限制为零 无 我已经尝试了所有可能的组合来完成这项工作 但我无法做到 我也在使用 override
  • MySQL触发器与事务插入或更新

    我正在使用 mysql db 和 java 所以在我的应用程序中我需要使用触发器 但我需要在插入或更新时保存它 当在表A中插入新记录时 触发器将完成在另一个表B中插入一些信息的工作 同样 当对表A中的记录进行更新时 触发器将更新表B中的记录
  • PHP:数组的索引、元素、键、值之间有区别吗?...它们是同一件事吗?

    当处理PHP arrays 我经常在这里使用这样的术语 Array Key Array Index Array Element Array Value 有人可以吗 PLEASE in simple术语解释了其中每一个的含义基本上 means
  • Visual C++ 中的嵌套注释?

    是否可以在 Visual C 中启用嵌套注释 如果有的话 我似乎找不到开关 C 标准中不允许嵌套注释 Visual C 支持该标准 抱歉 没有嵌套评论
  • 服务可以在 onBind 期间获取对 Activity 的引用吗?

    我有一项服务基本上管理媒体播放器播放实例podcasts 一旦活动绑定到服务 它就可以执行播放 暂停 停止等操作 我使用服务是因为我希望播客即使在活动被销毁后也能继续播放 我希望该服务能够在发生错误或正常状态更新时将消息发送回活动 该服务是
  • 如何在 Django-Registration 中使用不同的表单

    Django Registration 在 forms py 文件中有几个表单类 一是 类 RegistrationFormTermsOfService RegistrationForm 我需要对 Django 注册代码的其余部分进行哪些更
  • 会话在控制器方法中变为空

    我有以下控制器 在该控制器中我创建了会话来保存IENUMERABLE数据集 HttpPost ValidateInput false public ActionResult Create Brochure IEnumerable
  • Swift:一个数组中的不同对象?

    一个数组中是否可以有两个不同的自定义对象 我想在一个中显示两个不同的对象UITableView我认为最简单的方法是将所有对象放在一个数组中 根据您想要对数组进行多少控制 您可以创建两种对象类型都实现的协议 该协议不需要包含任何内容 可能是
  • 当拥有 @objcMembers 私有动态变量时 @objc 冗余?

    因此 我将 Realm 与 Swift 结合使用 并使用 objcMembers 关键字标记我的类 但是当我尝试创建一些私有变量时 Xcode 强制我在这些私有变量旁边添加 objc 这是有意的行为吗 看来这对我来说是多余的 objcMem