Swift:如何解决“协议”类型的弱变量非法的问题

2023-11-27

在阅读了有关此问题的一些帖子后,我发现我的协议应该继承自“class”,以便“weak”能够处理我的委托变量。

“weak”只能应用于类或类绑定协议类型。

如果我的协议不继承自“类”,那么 swift 是否会“推断”它应该是弱的?

这是将“协议”类型的变量转换为weak的事实上的方法吗?

内存管理方面会发生什么

protocol FacebookLoginViewControllerDelegate: class {
    func facebookLoginViewControllerDidLogin(controller: FacebookLoginViewController)
}

class FacebookLoginViewController: UIViewController {

    weak var delegate: FacebookLoginViewControllerDelegate?

}

制作一个协议类绑定: class只是告诉编译器它只能表示引用类型 - 因此您可以使用weak其上的属性。

如果你没有将协议标记为类绑定,那么 Swift 会假设它可以代表either引用或值类型。因为ARC(自动参考计数)仅适用于引用,而不适用于值,那么编译器将阻止您将weak其上的属性。

ARC 不适用于值类型的原因是因为它们得到copied当您传递它们时,而不是通过引用传递它们。因此,与引用类型不同,它们的内存可以轻松管理,因为它们的生命周期是超级可预测的。

对于引用类型,如果您使用委托模式,那么delegate应该永远是weak为了避免循环引用——因此协议应该始终是类绑定的。对委托使用值类型几乎没有任何意义,因为它始终引用您分配给它的内容的副本。

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

Swift:如何解决“协议”类型的弱变量非法的问题 的相关文章

  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • 当 isUserInteractionEnabled false 时,SKSpriteNode 不会让触摸通过

    我正在尝试在 SpriteKit 中创建一个覆盖层 方法是使用SKSpriteNode 但是 我希望触摸穿过覆盖层 所以我设置isUserInteractionEnabled为假 然而 当我这样做时 SKSpriteNode似乎仍然吸收所有
  • 如何检测用户是否第一次打开应用程序[重复]

    这个问题在这里已经有答案了 是否可以检测用户是否是第一次打开iOS应用程序 使用Objective C 我想在用户第一次打开应用程序时显示欢迎消息 但之后不再向他们显示 我正在寻找类似的东西 BOOL firstTime AppDelega
  • 如何动态获取 UITableViewCell 的高度

    我创建了自定义的tableViewCell 我在UITableViewCell中添加了UIView SubView 所以我在 UIView 中的所有动态文本和图像内容都会根据文本和图像大小而变化 但现在 HeightforRowAtInde
  • 无法在 ios 应用程序中通过 googlecast 正确投射视频

    我正在开发一个基于 AVPlayer 的自定义视频播放器项目 尝试整合谷歌演员 我已经根据谷歌图进行了集成 https codelabs developers google com codelabs cast videos ios http
  • 有没有办法在 Firebase 中等待查询完成?

    我正在使用 TableView 在 Viewcontroller 中的 iOS 应用程序中进行查询 我想确保在继续加载 TableView 之前我的查询已经返回 有没有办法保证查询已经完成 None
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • 将类型传递给通用 Swift 扩展,或者理想情况下推断它

    说你有 class Fancy UIView 你想找到所有兄弟姐妹Fancy意见 没问题 https stackoverflow com q 37232743 294884 for v UIView in superview subview
  • 在 WKWebView 中禁用缩放?

    有谁知道在 WKWebView 中禁用双击和捏缩放的简单方法 我尝试过的任何方法都不起作用 Webview scrollView allowsMagnification false Error value of type WKWebView
  • 如何使用phonegap在iOS应用程序中防止键盘推送webview

    当屏幕底部的输入字段获得焦点时 键盘会向上推我的网络视图 并且页面的上部不再可见 我想防止键盘推高网络视图 有人有主意吗 对焦 设置window scrollTo 0 0 这可以防止键盘完全推高 webview input on focus
  • 在 iOS 上使用 RNCryptor 异步解密大文件

    我需要在 iOS 上使用 RNCryptor 异步解密一个大文件 以便显示进度条 我在任何地方都找不到示例 因此尝试了我猜对的方法 但是 我想出的方法不起作用 解密器的处理程序从未被调用 并且线程在发送所有数据后因 EXC BAD ADDR
  • 根据内容自动更改单元格高度 - Swift

    在 Swift 中使用 UITableView 有人可以帮我根据标签 图片和描述自动更改单元格的高度吗 所有信息都正确传递 我只需要帮助格式化它 我尝试使用调整它cell frame size height 但这没有效果 我可以更改故事板中
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 从现有坐标地图套件中查找最近的位置

    我正在为拥有多家商店的客户开发 iPhone 应用程序 目标 C 我有数组中所有商店 20 的坐标 纬度 长 目前我正在考虑循环遍历商店坐标数组并获取从用户当前位置到商店位置的距离 然后将它们添加到数组中并按最小距离进行排序 这是正确的方法
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • 上传存档错误:“缺少 iOS 发行版签名身份......”

    我正在尝试使用 Xcode 将我的 iOS 应用程序存档上传到 iTunes Connect 但是当我单击 上传到 App Store 时 出现错误 Xcode 尝试查找或生成匹配的签名资产并 由于以下问题未能做到这一点 缺少 iOS 为
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • Matlab for 循环,循环计数器递减

    这不起作用 我可以找出原因 你能帮助我吗 for l 300 1 1 gauss fspecial gaussian 1 round 1 0 15 l 0 015 l filter g l 1 filter2 gauss img d l 1
  • 从表中计数,但在达到某个数字时停止计数

    MySQL 有没有办法COUNT 从表中如果数字大于x 它会在那里停止计数吗 基本上 我只想知道查询返回的记录数是否大于或小于特定数字 如果大于该数字 我并不关心有多少行 如果小于该数字 请告诉我计数 我已经能够像这样捏造它 let x b
  • CSS 选择器无法匹配数字属性值?为什么?

    我设置了一个简单的测试页面来说明我遇到的问题 简而言之 这按预期工作 文本格式为粗体 带红色下划线
  • 去掉选项菜单周围的白色边框

    我正在尝试去掉周围的白色边框OptionMenu 我尝试过的 我把颜色改为红色 但周围仍然有白色边框 有人可以帮忙吗 这是代码 from tkinter import import tkinter as tk from tkinter im
  • delay() 和 fadeOut() 不会延迟队列中的 attr()

    这段代码有什么问题 我试图得到这样的效果 fadeOut 500 and attr class myClass 延迟了 600 毫秒 然后delay 600 再次 并且fadeIn 500 延迟发生是正确的 但是attr 没有被延迟 它会在
  • “connection.queries”在 Django 中不返回任何内容

    from django db import connection reset queries 印刷 reset queries p XModel objects filter id id values name annotate quant
  • 如何向 Android 添加新的手机日历?

    Android 上的日历应用程序可以合并多个单独的日历 本地手机日历 Google 日历等 如何向 Android 手机添加新的此类日历 我想动态生成该日历中的事件 而无需访问任何在线资源 例如 Google 编辑 我想支持 Android
  • Javascript 历史框架的经验

    我正在寻找一个 javascript 历史框架来在用户选择多个更改页面行为的选项时处理页面内的导航 页面上有多个人工制品会更改页面的数据加载 我想将其存储为一组堆叠的行为 从更广泛的意义上讲 出于同样的原因 我想将其作为工具包添加到我未来的
  • 在 Asyncio Web 抓取应用程序中将 BeautifulSoup 代码放在哪里

    我需要抓取并获取许多 每天 5 10k 新闻文章的正文段落的原始文本 我已经编写了一些线程代码 但考虑到这个项目的高度 I O 绑定性质 我正在涉足asyncio 下面的代码片段并不比 1 线程版本快 而且比我的线程版本差得多 谁能告诉我我
  • @selector 中的参数

    有什么方法可以在选择器中传递参数吗 example 我有这个方法 void myMethod NSString value1 setValue2 NSString value2 我需要通过传递两个参数的选择器来调用这个函数 NSTimer
  • 有谁知道pytesseract的image_to_data、image_to_osd方法的输出含义?

    我正在尝试使用从图像中提取数据pytesseract 该模块有图像到数据 图像到OSD方法 这两个方法提供了大量信息 TextLineOrder WritingDirection ScriptDetection Orientation 等
  • 如何将 Double 格式化为货币 - Swift 3

    我是 Swift 编程新手 我一直在 Xcode 8 2 中创建一个简单的小费计算器应用程序 我在我的 Xcode 中设置了计算IBAction以下 但当我实际运行我的应用程序并输入要计算的金额 例如 23 45 时 它会显示超过 2 位小
  • 何时发生 Windows Phone 中的 System.Windows.ni.dll 中发生类型为“'System.Reflection.TargetInitationException'”的未处理异常

    我正在创建一个WP8使用的应用程序Web Service获取 创建 更新和删除数据并显示它 现在的问题是我的应用程序因抛出而崩溃 未处理的类型异常 System Reflection TargetInitationException 发生在
  • 如何使用 Hibernate eqOrIsNull()

    我在 MySQL 中有两行是这样的 foo bar NULL 空的地方是空字符串 现在我想同时拥有它们 我用Criteria and Restrictions eqOrIsNull 在两列上 但它总是只返回一行 代码是这样的 criteri
  • Windows 7 任务栏图标突出显示颜色

    谁能解释当鼠标悬停在任务栏项目上时 如何根据 Windows 7 任务栏等图像中的主色计算突出显示颜色 有c 代码吗 我相信它的作用是使用类似于以下的方法来获取应用程序图标中最突出的颜色 Python 查找图像中的主要 最常见颜色 有了这些
  • Linux 何时/如何将共享库加载到地址空间?

    程序中什么时候指定共享对象的地址 链接期间 加载中 如果我想找到的内存地址system里面的命令libc在我的程序中我可以轻松找到它gdb 但是如果我不想将程序带入调试器怎么办 这个地址在不同的运行中会改变吗 是否有任何其他静态分析工具可以
  • 在 Web Api 2 中启用会话[重复]

    这个问题在这里已经有答案了 我知道 REST 应该是无状态的 我的 Web Api 与我的 MVC 网站位于同一项目中 我如何在他们之间共享会话 我正在尝试使用 Web Api 2 的优点并使用 Ajax 而不是构建 RESTful API
  • 中的虚线描边

    我想不可能设置像 CSS 这样的描边属性 这很容易 对于 CSS 我们有虚线 点线 实线 但在画布上绘制线条 或笔划时 这似乎不是一个选项 您是如何实施的 我看过一些例子 但它们真的很渴望这样一个愚蠢的功能 例如 http groups g
  • 如何使正则表达式模式优先于另一个模式

    我正在使用正则表达式来提取大学名称 主要观察到两种模式 某个名字 大学 gt 例如 安娜大学 某物 大学 gt 例如 埃克塞特大学 为此 我编写了两种模式 regex re compile join r Uu niversity of w
  • Swift:如何解决“协议”类型的弱变量非法的问题

    在阅读了有关此问题的一些帖子后 我发现我的协议应该继承自 class 以便 weak 能够处理我的委托变量 weak 只能应用于类或类绑定协议类型 如果我的协议不继承自 类 那么 swift 是否会 推断 它应该是弱的 这是将 协议 类型的