我正在尝试为符合多个协议(protocol)的 UITableViewCell 的委托(delegate)属性定义 typealias
。这就是我正在尝试做的事情,Swift 提示我的语法错误:
// The typealias definition
typealias CellDelegate = AnyObject<UIPickerViewDataSource, UIPickerViewDelegate>
// In my UITableViewCell subclass:
weak var delegate: CellDelegate?
“无法专门化非通用类型 AnyObject”是我遇到的错误。我该如何正确执行此操作?
最佳答案
您发布的代码与您预期的含义不同。您将 AnyObject
视为通用类型,将 UIPickerViewDataSource
和 UIPickerViewDelegate
作为类型参数。这与使用 Int
键和 String
值创建一个 Dictionary
是一样的,例如:
var someDictionary: Dictionary<Int, String>
您要实现的目标需要一个不同的结构,称为协议(protocol)组合。 Swift 专门提供它来表达符合多种协议(protocol)的类型。它的语法如下,你可以在任何可以使用常规类型的地方使用它:
FirstProtocol & SecondProtocol
使用此功能,您的代码将变为:
// The typealias definition
typealias CellDelegate = UIPickerViewDataSource & UIPickerViewDelegate
// In my UITableViewCell subclass:
weak var delegate: CellDelegate?
Apple 的 Swift 语言指南中解释了协议(protocol)组合,here .
编辑:更新为 Swift 3 语法,感谢@raginmari
关于ios - 为任何实现多个协议(protocol)的对象定义一个 Swift 类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29714773/