Swift protocol error: #39;weak#39; cannot be applied to non-class type(SWIFT协议错误:#39;弱#39;不能应用于非类类型)
本文介绍了SWIFT协议错误:';弱';不能应用于非类类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
协议和类绑定协议有什么区别,我们应该在SWIFT中使用哪种协议?
protocol A : class { ... }
protocol A { ... }
当协议未定义为: class
时,尝试添加weak
委托时出错:
protocol A { ... }
weak var delegate: A
给出错误:
"弱"不能应用于非类类型
或
"弱"不能应用于非类绑定的"A";请考虑添加具有类绑定的协议一致性
推荐答案
SWIFT&>=4:
protocol A : AnyObject { ... {
SWIFT<;4:
protocol A : class { ... }
定义"class-only protocol":只有类类型(而不是结构或枚举)可以采用此协议。
弱引用仅为引用类型定义。班级 是引用类型,结构和枚举是值类型。 (闭包也是引用类型,但是闭包不能采用 协议,因此它们在此上下文中无关紧要。)
因此,如果符合协议的对象需要存储在弱属性中,则该协议必须是仅类协议。
这里是另一个需要纯类协议的示例:
protocol A {
var name : String { get set }
}
func foo(a : A) {
a.name = "bar" // error: cannot assign to property: 'a' is a 'let' constant
}
这不会编译,因为对于结构和枚举的实例,a.name = "bar"
是a
的突变。如果您定义
协议为
protocol A : class {
var name : String { get set }
}
则编译器知道a
是该对象的类类型的实例
a
是对对象存储器的引用,
和a.name = "bar"
修改引用的对象,但不修改a
。
因此,通常情况下,如果需要,您可以定义仅类协议
采用协议的类型为引用类型,不是值类型。
这篇关于SWIFT协议错误:';弱';不能应用于非类类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:SWIFT协议错误:';弱';不能应用于非类类型
基础教程推荐
猜你喜欢
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01