例如:
var a = [1, 2, 3] // Ints
var s = ",".join(a) // EXC_BAD_ACCESS
Run Code Online (Sandbox Code Playgroud)
是否可以使连接函数返回"1,2,3"?
扩展Int(或其他自定义类型)以符合某些协议?
Jon*_*auz 33
从Xcode的7.0测试版6在斯威夫特2,现在你应该使用[String].joinWithSeparator(",")
.
在您的情况下,您仍然需要将Int更改为String类型,因此我添加了map()
.
var a = [1, 2, 3] // [1, 2, 3]
var s2 = a.map { String($0) }.joinWithSeparator(",") // "1,2,3"
Run Code Online (Sandbox Code Playgroud)
从Xcode的8.0的β1在夫特3代码稍有变化到
[String].joined(separator: ",")
.
var s3 = a.map { String($0) }.joined(separator: ",") // "1,2,3"
Run Code Online (Sandbox Code Playgroud)
Bry*_*hen 29
试试这个
var a = [1, 2, 3] // Ints
var s = ",".join(a.map { $0.description })
Run Code Online (Sandbox Code Playgroud)
或者添加此扩展程序
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
Run Code Online (Sandbox Code Playgroud)
join定义为
extension String {
func join<S : SequenceType where String == String>(elements: S) -> String
}
Run Code Online (Sandbox Code Playgroud)
这意味着它需要一个字符串序列,你不能将一系列int传递给它.
小智 10
而只是为了让您的生活更完整的,从开始的Xcode 8.0 Beta 1中的斯威夫特3,你现在应该使用[String].joined(separator: ",")
.
这是Swift API的新"ed/ing"命名规则:
根据副作用命名功能和方法
- 那些没有副作用的人应该读作名词短语,例如xdistance(to:y),i.successor().
- 那些有副作用的人应该读作命令式动词短语,例如print(x),x.sort(),x.append(y).
- 名称突变/非突变方法对一致.变异方法通常具有类似语义的非突变变体,但返回新值而不是就地更新实例. Swift:API设计指南
最简单的方法是改变@ BryanChen的答案:
",".join(a.map { String($0) } )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15155 次 |
最近记录: |