ios - 为任何实现多个协议(protocol)的对象定义一个 Swift 类型别名

标签 ios cocoa-touch swift

我正在尝试为符合多个协议(protocol)的 UITableViewCell 的委托(delegate)属性定义 typealias。这就是我正在尝试做的事情,Swift 提示我的语法错误:

// The typealias definition
typealias CellDelegate = AnyObject<UIPickerViewDataSource, UIPickerViewDelegate>

// In my UITableViewCell subclass:
weak var delegate: CellDelegate?

“无法专门化非通用类型 AnyObject”是我遇到的错误。我该如何正确执行此操作?

最佳答案

您发布的代码与您预期的含义不同。您将 AnyObject 视为通用类型,将 UIPickerViewDataSourceUIPickerViewDelegate 作为类型参数。这与使用 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/

相关文章:

ios - 如何在 iOS 上获取变量中的位置(纬度和经度值)?

swift - 如何使用 JSON 文字字符串创建 Swift 变量?

ios - NSURL 为有效 URL 返回 nil

ios 在显示键盘上强制自动布局更新

ios - 无法完成付款队列中未完成的交易

iphone - 如何为 UIToolbar 上的按钮添加滚动?

ios - 如果我不需要持久存储,那么以类似数据库的方式存储数据的最佳做法是什么? NSMutableArray?

ios - 带有圆角和边框的 UIView 边缘颜色错误

objective-c - Cocoa-Touch - 如何解析本地 Json 文件

swift - 通过多次上传更新 Firebase 数据库对象