我知道如何以编程方式实现它,但我相信有一种内置的方法...
我使用过的每种语言都有一些默认的文本表示方式,用于在尝试将数组与字符串连接或将其传递给print()函数等时输出。苹果的Swift语言是否具有将数组轻松转换为字符串的内置方法,还是我们总是需要明确将数组转换为字符串?
String
的 join
方法:var array = ["1", "2", "3"]
let stringRepresentation = "-".join(array) // "1-2-3"
在Swift 2中:
var array = ["1", "2", "3"]
let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"
如果您想使用特定分隔符(连字符、空格、逗号等),这将非常有用。
否则,您可以直接使用description
属性,它返回数组的字符串表示形式:
let stringRepresentation = [1, 2, 3].description // "[1, 2, 3]"
提示:任何实现 Printable
协议的对象都有一个 description
属性。如果你在自己的类/结构中采用该协议,也可以使它们更易于打印。
在 Swift 3 中:
join
变为 joined
,例如 [nil, "1", "2"].flatMap({$0}).joined()
joinWithSeparator
变为 joined(separator:)
(仅适用于字符串数组)在 Swift 4 中:
var array = ["1", "2", "3"]
array.joined(separator:"-")
"-".join(array)
不再可用,请尝试使用array.joinWithSeparator("-")
。注意保持原意,使内容更易懂。 - Harry NgjoinWithSeparator
仅适用于字符串数组。如果您有其他对象的数组,请先使用map
。例如,[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
。 - Dmitry在Swift 5中,根据您的需求,您可以选择以下其中一个Playground示例代码来解决问题。
Character
数组转换为没有分隔符的String
:let characterArray: [Character] = ["J", "o", "h", "n"]
let string = String(characterArray)
print(string)
// prints "John"
let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: "")
print(string) // prints: "BobDanBryan"
String
组成的数组转换为带有单词分隔符的String
:let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: " ")
print(string) // prints: "Bob Dan Bryan"
String
组成的数组转换为带分隔符的 String
:let stringArray = ["car", "bike", "boat"]
let characterArray = stringArray.flatMap { $0 }
let stringArray2 = characterArray.map { String($0) }
let string = stringArray2.joined(separator: ", ")
print(string) // prints: "c, a, r, b, i, k, e, b, o, a, t"
Float
数组转换为带有数字分隔符的String
:let floatArray = [12, 14.6, 35]
let stringArray = floatArray.map { String($0) }
let string = stringArray.joined(separator: "-")
print(string)
// prints "12.0-14.6-35.0"
try JSONDecoder().decode([Int].self, from: Data(string.utf8))
- Leo DabusSwift 2.0 Xcode 7.0 beta 6及以上版本使用joinWithSeparator()
替代join()
:
var array = ["1", "2", "3"]
let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"
joinWithSeparator
是在 SequenceType
上定义的扩展方法。
extension SequenceType where Generator.Element == String {
/// Interpose the `separator` between elements of `self`, then concatenate
/// the result. For example:
///
/// ["foo", "bar", "baz"].joinWithSeparator("-|-") // "foo-|-bar-|-baz"
@warn_unused_result
public func joinWithSeparator(separator: String) -> String
}
Swift 3
["I Love","Swift"].joined(separator:" ") // previously joinWithSeparator(" ")
[0, 1, 1, 0].map {"\($0)"}.reduce("") { $0 + $1 } // "0110"
秉承函数式编程的精神
[0,1,1,0].map{"\($0)"}.reduce("",+)
。 - XLE_22[0,1,1,0]
数组中的每个元素转换成字符串,然后拼接起来。 - Leo Dabus...reduce(into: "") { $0 += $1 }
- Cœur在 Swift 4 中
let array:[String] = ["Apple", "Pear ","Orange"]
array.joined(separator: " ")
更改一个包含Optional/Non-Optional字符串的数组
//Array of optional Strings
let array : [String?] = ["1",nil,"2","3","4"]
//Separator String
let separator = ","
//flatMap skips the nil values and then joined combines the non nil elements with the separator
let joinedString = array.flatMap{ $0 }.joined(separator: separator)
//Use Compact map in case of **Swift 4**
let joinedString = array.compactMap{ $0 }.joined(separator: separator
print(joinedString)
ListFormatter
:let formatter = ListFormatter()
let names = ["Moe", "Larry", "Curly"]
if let string = formatter.string(from: names) {
print(string)
}
它支持任何已本地化应用程序并且用户设备配置中的语言。例如,拥有支持德语本地化的应用程序的德国用户将看到:Moe, Larry 和 Curly
Moe, Larry und Curly
var stringIds = (self.mylist.map{$0.id ?? 0}).map{String($0)}.joined(separator: ",")
来源: urvish modi 帖子: 将 int 数组转换为逗号分隔的字符串
您可以使用循环来完成此操作,或者使用map函数。
通过映射:
let array = ["one" , "two" , "three"]
array.map({$0}).joined(seperator : ",")
Output-> ("one,two,three")
array.description
或者如果您想要自定义分隔符则使用array.joined(separator: ",")
。 - Jonathan Solorzano