我知道如何通过编程来做到这一点,但我相信有一种内置的方式……

我使用过的每种语言都有某种对象集合的默认文本表示,当您试图将Array与字符串连接起来或将其传递给print()函数等时,它会吐出这些文本表示。苹果的Swift语言是否有一种内置的方式,可以轻松地将数组转换为字符串,或者我们总是必须显式地对数组进行字符串化?


当前回答

修改一个可选/非可选字符串数组

//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)

这里是flatMap, compactMap跳过数组中的nil值,并附加其他值以给出一个连接字符串。

其他回答

如果你的问题是这样的: tobeFormattedString = ["a", "b", "c"] 输出= "abc"

String(tobeFormattedString)

当你也有struct数组时,你可以使用joined()来获得单个String。

struct Person{
    let name:String
    let contact:String
}

使用map() & joined()可以轻松生成字符串

PersonList.map({"\($0.name) - \($0.contact)"}).joined(separator: " | ")

输出:

Jhon - 123 | Mark - 456 | Ben - 789  

使用Swift 5,根据您的需要,您可以选择以下Playground示例代码之一来解决您的问题。


将字符数组转换为不带分隔符的字符串:

let characterArray: [Character] = ["J", "o", "h", "n"]
let string = String(characterArray)

print(string)
// prints "John"

将String数组转换为不带分隔符的String:

let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: "")

print(string) // prints: "BobDanBryan"

将字符串数组转换为单词之间带有分隔符的字符串:

let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: " ")

print(string) // prints: "Bob Dan Bryan"

将字符串数组转换为字符之间带有分隔符的字符串:

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"

如果你想转换自定义对象数组为字符串或逗号分隔字符串(csv),你可以使用

 var stringIds = (self.mylist.map{$0.id ?? 0}).map{String($0)}.joined(separator: ",")

归功于:莫迪 post:将int数组转换为逗号分隔的字符串

现在,在iOS 13+和macOS 10.15+中,我们可能会使用ListFormatter:

let formatter = ListFormatter()

let names = ["Moe", "Larry", "Curly"]
if let string = formatter.string(from: names) {
    print(string)
}

这将生成一个漂亮的自然语言字符串表示列表。美国用户将看到:

老谋子,拉里和卷毛

它将支持任何语言,其中(a)你的应用程序已本地化;并且(b)配置了用户的设备。例如,一个德国用户的应用程序支持德语本地化,他会看到:

莫、拉瑞、克利