冒号后带有“类”的协议? [复制]
Posted
技术标签:
【中文标题】冒号后带有“类”的协议? [复制]【英文标题】:protocol with "class" after the colon? [duplicate] 【发布时间】:2017-12-17 10:46:10 【问题描述】:谁能解释一下下面的协议语法:
protocol AddItemViewControllerDelegate: class
func addItemViewControllerDidCancel(_ controller: AddItemViewController)
func addItemViewController(_ controller: AddItemViewController,
didFinishAdding item: ChecklistItem)
“类”是做什么的?
【问题讨论】:
【参考方案1】:这意味着该协议只能被类采用。所以没有任何结构或枚举可以采用这个协议。
仅类协议
您可以将协议采用限制为类类型(而不是结构或 枚举)通过将 AnyObject 协议添加到协议的 继承列表。
protocol SomeClassOnlyProtocol: AnyObject, SomeInheritedProtocol // class-only protocol definition goes here
在上面的例子中,SomeClassOnlyProtocol 只能被类类型采用。它的 编写结构或枚举定义的编译时错误 尝试采用 SomeClassOnlyProtocol。
注意
当该协议定义的行为由该协议定义时,请使用该协议 要求假定或要求符合的类型具有引用 语义而不是值语义。有关参考和价值的更多信息 语义,请参阅结构和枚举是值类型和类 是引用类型。
参考:Swift Programming Language - Protocols
【讨论】:
谢谢。在 Apple 的 Swift 语言 guide 中,似乎没有任何关于为此目的使用“类”的内容。在protocol section 中,该指南提到为此目的使用 AnyObject。 @7stud:你是对的,我认为在该文档的早期版本中他们使用了class
关键字。目的是一样的,但不知道为什么要更改关键字。将对此进行研究:)
您引用的参考文献中没有提到: class
。似乎 Apple 更改了文档(比较这个较旧的答案:***.com/a/32118452/1187415 来自链接到重复的目标)。 – 请参阅 ***.com/questions/30176814/… 了解为什么(显然)相同。
@MartinR:我读过 Apple Swift 以前的文档,因为他们使用了 class 而不是 AnyObject(我清楚地记得这一点)。感谢您提供第二个链接,我现在对此有了清晰的认识。以上是关于冒号后带有“类”的协议? [复制]的主要内容,如果未能解决你的问题,请参考以下文章