例如:
var a = [1, 2, 3] // Ints
var s = ",".join(a) // EXC_BAD_ACCESS是否可以使联接函数返回"1,2,3“?
扩展Int (或其他自定义类型)以符合某些协议?
发布于 2014-08-30 10:26:30
尝尝这个
var a = [1, 2, 3] // Ints
var s = ",".join(a.map { $0.description })或添加此扩展
extension String {
func join<S : SequenceType where S.Generator.Element : Printable>(elements: S) -> String {
return self.join(map(elements){ $0.description })
}
// use this if you don't want it constrain to Printable
//func join<S : SequenceType>(elements: S) -> String {
// return self.join(map(elements){ "\($0)" })
//}
}
var a = [1, 2, 3] // Ints
var s = ",".join(a) // works with new overload of join联接定义为
extension String {
func join<S : SequenceType where String == String>(elements: S) -> String
}这意味着它需要一个字符串序列,您不能将一个int序列传递给它。
发布于 2015-08-25 09:35:28
从Xcode 7.0 beta 6到Swift 2,现在您应该使用[String].joinWithSeparator(",")。
在您的示例中,仍然需要将Int更改为String类型,因此我添加了map()。
var a = [1, 2, 3] // [1, 2, 3]
var s2 = a.map { String($0) }.joinWithSeparator(",") // "1,2,3"从Xcode 8.0beta 1到Swift 3代码,略有更改为[String].joined(separator: ",")。
var s3 = a.map { String($0) }.joined(separator: ",") // "1,2,3"发布于 2016-06-20 00:49:56
为了使您的生活更加完整,从Xcode 8.0 beta 1开始,在Swift 3中,您现在应该使用[String].joined(separator: ",")。
这是Swift API的新"ed/ing“命名规则:
名称函数和方法根据它们的副作用
https://stackoverflow.com/questions/25581324
复制相似问题