swift - 如何停止 Swift 中匹配元组类型的泛型函数?
问题描述
我有这两种方法
func doSomething<T>(_ completion: (T) -> Void) { ... }
func doSomething<T, U>(_ completion: (T, U) -> Void) { ... }
不幸的是,当我尝试使用具有两种泛型类型的版本时,这将无法编译。
doSomething { (value1: String, value2: Int) in ... }
因为它在第二个doSomething<String, Int>
和第一个之间是模棱两可的,doSomething<(String, Int)>
即一个泛型类型,它是一个包含两个字符串的元组。
显然,我可以将这些方法称为两个不同的名称!有没有办法在不这样做的情况下解决这种歧义?
解决方案
( doSomething as ( (String, Int) -> Void ) -> Void ) { value1, value2 in }
你可以做一个类型别名……</p>
typealias DoSomething<T, U> = ( (T, U) -> Void ) -> Void
(doSomething as DoSomething) { (value1: String, value2: Int) in }
(doSomething as DoSomething<String, Int>) { _ = ($0, $1) }
…但是类型别名不能被重载,所以除了一个之外,每个函数重载都需要一个别名。那没有任何意义;给函数起不同的名字会更简单。
推荐阅读
- html - 如何使用 Flask 从 HTML 表中删除数据
- python - 有没有办法在没有循环的情况下引用 Pandas 列中的先前值?
- python - 如何使 `plt.show()` 响应 ctrl-C?
- php - 如何根据 meta_key 检查购物车中产品的重量?
- python - 使用 Python 解析 XML 并创建 excel 报告 - Elementree/lxml
- django - Django qry在获取列表时返回相关ID而不是对象(Message.objects.select_related(“message_from”).filter(message_to = user.user_id).values())
- sql - SQL 获取单独表中相关实体的计数
- python - 在 Anaconda Jupyter Notebook 中安装 BEST 包
- python - 连接上的 Flask-sqlalchemy ORM TypeError
- c - 无法设置进程时钟的时间,我需要一些权限吗?