结肠后带“类”的协议? [重复]

问题描述 投票:1回答:1

任何人都可以解释以下协议语法:

protocol AddItemViewControllerDelegate: class {
  func addItemViewControllerDidCancel(_ controller: AddItemViewController)
  func addItemViewController(_ controller: AddItemViewController,
                     didFinishAdding item: ChecklistItem)
}

“班级”做什么?

swift
1个回答
2
投票

这意味着该协议只能由类采用。所以没有Structure或Enum可以采用这个协议。

Class-Only Protocols

您可以通过将AnyObject协议添加到协议的继承列表来将协议采用限制为类类型(而不是结构或枚举)。

protocol SomeClassOnlyProtocol: AnyObject, SomeInheritedProtocol {
    // class-only protocol definition goes here
}

在上面的示例中,SomeClassOnlyProtocol只能由类类型采用。编写尝试采用SomeClassOnlyProtocol的结构或枚举定义是编译时错误。

注意

当该协议的要求定义的行为假定或要求符合类型具有引用语义而不是值语义时,请使用仅类协议。有关引用和值语义的更多信息,请参阅结构和枚举值类型和类是引用类型。

参考:Swift Programming Language - Protocols

© www.soinside.com 2019 - 2024. All rights reserved.