我需要在函数joined(separator:)
周围创建一个包装器,我认为最好的方法是创建声明原始函数的JoinedSequence
struc的扩展名。
所以我写了这个示例代码:
extension JoinedSequence {
func joinWithComma() -> String {
return joined(separator: ", ")
}
}
不幸的是,无效,因为“对成员的歧义引用'加入了()'”。
joinWithComma
应该使用CustomStringConvertible
序列,并且应该返回String
答案 0 :(得分:2)
这可能是你想要的:
extension Sequence where Iterator.Element == String {
public func joinWithComma() -> String {
return joined(separator: ", ")
}
}
var arr = ["1", "2"]
arr.joinWithComma() // output: "1, 2"
查看其joined(separator: String = default) -> String
方法的Array documentation,说明了这一点:
如果您尝试将JoinedSequence用于此目的,则新方法扩展将无法访问数组。
extension JoinedSequence where Base.Iterator.Element.Iterator.Element == String {
public func joinWithComma() -> String {
return joined(separator: ", ")
}
}
var arr = ["1", "2"]
arr.joinWithComma()
// Compiler error: Value of type '[String]' has no member 'joinWithComma'
注意:这是我自己对此的观察,可能更有经验的人可以准确地说明这个问题的解释。