我知道如何通过编程来做到这一点,但我相信有一种内置的方式……
我使用过的每种语言都有某种对象集合的默认文本表示,当您试图将Array与字符串连接起来或将其传递给print()函数等时,它会吐出这些文本表示。苹果的Swift语言是否有一种内置的方式,可以轻松地将数组转换为字符串,或者我们总是必须显式地对数组进行字符串化?
我知道如何通过编程来做到这一点,但我相信有一种内置的方式……
我使用过的每种语言都有某种对象集合的默认文本表示,当您试图将Array与字符串连接起来或将其传递给print()函数等时,它会吐出这些文本表示。苹果的Swift语言是否有一种内置的方式,可以轻松地将数组转换为字符串,或者我们总是必须显式地对数组进行字符串化?
当前回答
对于某些语言(如希伯来语或日语),分隔符可能不是一个好主意。 试试这个:
// Array of Strings
let array: [String] = ["red", "green", "blue"]
let arrayAsString: String = array.description
let stringAsData = arrayAsString.data(using: String.Encoding.utf16)
let arrayBack: [String] = try! JSONDecoder().decode([String].self, from: stringAsData!)
对于其他数据类型,分别为:
// Set of Doubles
let set: Set<Double> = [1, 2.0, 3]
let setAsString: String = set.description
let setStringAsData = setAsString.data(using: String.Encoding.utf16)
let setBack: Set<Double> = try! JSONDecoder().decode(Set<Double>.self, from: setStringAsData!)
其他回答
对于某些语言(如希伯来语或日语),分隔符可能不是一个好主意。 试试这个:
// Array of Strings
let array: [String] = ["red", "green", "blue"]
let arrayAsString: String = array.description
let stringAsData = arrayAsString.data(using: String.Encoding.utf16)
let arrayBack: [String] = try! JSONDecoder().decode([String].self, from: stringAsData!)
对于其他数据类型,分别为:
// Set of Doubles
let set: Set<Double> = [1, 2.0, 3]
let setAsString: String = set.description
let setStringAsData = setAsString.data(using: String.Encoding.utf16)
let setBack: Set<Double> = try! JSONDecoder().decode(Set<Double>.self, from: setStringAsData!)
如果你想在数组中丢弃空字符串。
["Jet", "Fire"].filter { !$0.isEmpty }.joined(separator: "-")
如果你也想过滤nil值:
["Jet", nil, "", "Fire"].flatMap { $0 }.filter { !$0.isEmpty }.joined(separator: "-")
可以使用print函数打印任何对象
或者使用\(name)将任何对象转换为字符串。
例子:
let array = [1,2,3,4]
print(array) // prints "[1,2,3,4]"
let string = "\(array)" // string == "[1,2,3,4]"
print(string) // prints "[1,2,3,4]"
使用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"
现在,在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)配置了用户的设备。例如,一个德国用户的应用程序支持德语本地化,他会看到:
莫、拉瑞、克利