【发布时间】:2019-03-30 13:36:34
【问题描述】:
以下函数定义是合法的 Swift:
func doSomething<T: StringProtocol>(value: T = "abc") {
// ...
}
编译器能够确定默认参数"abc" 是String,并且String 符合StringProtocol。
但此代码无法编译:
func doSomething<T: Collection>(value: T = "abc") where T.Element == Character {
// ...
}
编译器错误:
“String”类型的默认参数值无法转换为“T”类型
似乎编译器将拥有与第一种情况一样多的信息来确定String 确实可以转换为T。此外,如果我删除默认参数并使用相同的值调用函数,它会起作用:
doSomething(value: "abc")
这个函数可以用不同的方式编写,以便我可以提供默认的String 参数吗?这是 Swift 的限制,还是我心智模型的限制?
【问题讨论】:
-
我不知道你能做到这一点;谢谢你的提问!
标签: swift string compiler-errors