【发布时间】:2016-07-23 19:19:05
【问题描述】:
我正在尝试为[String] 编写扩展方法。
看起来你不能直接扩展[String](“类型'元素'被限制为非协议类型'字符串'”),虽然我遇到了这个技巧:
protocol StringType { }
extension String: StringType { }
但我仍然不能让 Swift 类型系统对此感到满意:
extension Array where Element: StringType {
// ["a","b","c","d","e"] -> "a, b, c, d, or e".
func joinWithCommas() -> String {
switch count {
case 0, 1, 2:
return joinWithSeparator(" or ")
default:
return dropLast(1).joinWithSeparator(", ") + ", or " + last!
}
}
}
joinWithSeparator 调用是“模棱两可的”。我已经尝试了所有我能想到的方法,比如使用 (self as! [String])(以及一堆类似的变体),但似乎没有任何效果。
如何让 Swift 编译器对此感到满意?
【问题讨论】:
标签: swift