将 Swift 字符串转换为数组

如何在 Swift 中将字符串 "Hello"转换为数组 ["H","e","l","l","o"]

在 Objective-C 中,我使用了以下方法:

NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
NSString *ichar  = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
[characters addObject:ichar];
}
240583 次浏览

在斯威夫特(Swift)中,这甚至更容易:

let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o,  , 🐶, 🐮,  , 🇩🇪]

这里使用的事实是

  • 可以从 SequenceType创建一个 Array,并且
  • String符合 SequenceType协议及其序列生成器 枚举字符。

由于 Swift 字符串完全支持 Unicode,所以即使对字符也可以这样做 在「基本多语言平面」(例如)之外,并具有扩展字形 集群(例如,它实际上是由 Unicode 标量组成的)。


更新: 从 Swift 2开始, String不再符合 但是 characters属性提供了 Unicode 字符:

let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)

这也适用于 Swift 3


更新: 截至 Swift 4, String(再次)是它的 Characters:

let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]

Martin R 的答案是最好的方法,正如他所说,因为 String 符合 SquenceType 协议,所以您还可以枚举一个字符串,在每次迭代中获取每个字符。

let characters = "Hello"
var charactersArray: [Character] = []


for (index, character) in enumerate(characters) {
//do something with the character at index
charactersArray.append(character)
}


println(charactersArray)

编辑(Swift 4)

在 Swift 4中,您不必使用 characters来使用 map(),只需在字符串上执行 map()即可。

let letters = "ABC".map { String($0) }
print(letters) // ["A", "B", "C"]
print(type(of: letters)) // Array<String>

或者如果您希望更短: "ABC".map(String.init)(2字节)

编辑(Swift 2 & Swift 3)

在 Swift 2和 Swift 3中,可以对 characters属性使用 map()函数。

let letters = "ABC".characters.map { String($0) }
print(letters) // ["A", "B", "C"]

原创(Swift 1.x)

接受的答案似乎不是最好的,因为序列转换的 String不是 String序列,而是 Character:

$ swift
Welcome to Swift!  Type :help for assistance.
1> Array("ABC")
$R0: [Character] = 3 values {
[0] = "A"
[1] = "B"
[2] = "C"
}

下面的方法对我很有用:

let str = "ABC"
let arr = map(str) { s -> String in String(s) }

全局函数 map()的参考文献在这里: http://swifter.natecook.com/func/map/

您还可以创建一个扩展:

var strArray = "Hello, playground".Letterize()


extension String {
func Letterize() -> [String] {
return map(self) { String($0) }
}
}
    let string = "hell0"
let ar = Array(string.characters)
print(ar)
func letterize() -> [Character] {
return Array(self.characters)
}

在 String: 组件(披露: 字符串)上也有这个有用的函数

let string = "1;2;3"
let array = string.components(separatedBy: ";")
print(array) // returns ["1", "2", "3"]

处理由“ ;”或者甚至“ n”这样的字符分隔的字符串效果很好

更新为 Swift 4

这里有三种方法。

//array of Characters
let charArr1 = [Character](myString)


//array of String.element
let charArr2 = Array(myString)


for char in myString {
//char is of type Character
}

在某些情况下,人们真正想要的是一种将字符串转换成每个字符长度为1的小字符串数组的方法。这里有一个超级有效的方法:

//array of String
var strArr = myString.map { String($0)}

Swift 3

这里有三种方法。

let charArr1 = [Character](myString.characters)
let charArr2 = Array(myString.characters)
for char in myString.characters {
//char is of type Character
}

在某些情况下,人们真正想要的是一种将字符串转换成每个字符长度为1的小字符串数组的方法。这里有一个超级有效的方法:

var strArr = myString.characters.map { String($0)}

或者可以向 String 添加扩展。

extension String {
func letterize() -> [Character] {
return Array(self.characters)
}
}

然后你可以这样称呼它:

let charArr = "Cat".letterize()

在 Swift 4中,由于 StringCharacter的集合,因此需要使用 map

let array1 = Array("hello") // Array<Character>
let array2 = Array("hello").map({ "\($0)" }) // Array<String>
let array3 = "hello".map(String.init) // Array<String>

字符串上的函数: components(separatedBy: String)

在 Swift 5.1中

有变化:

string.split(separator: "/")

一个简单的方法是返回变量 map,并将每个 Character作为 String返回:

let someText = "hello"


let array = someText.map({ String($0) }) // [String]

输出应该是 ["h", "e", "l", "l", "o"]

假设您有四个文本字段 otpOneTxtotpTwoTxtotpThreeTxtotpFourTxt和一个字符串 getOtp

let getup = "5642"
let array = self.getOtp.map({ String($0) })
                

otpOneTxt.text = array[0] //5
otpTwoTxt.text = array[1] //6
otpThreeTxt.text = array[2] //4
otpFourTxt.text = array[3] //2

对于 Swift 5.3版本,其简单程度如下:

let string = "Hello world"
let characters = Array(string)


print(characters)

//[“ H”,“ e”,“ l”,“ l”,“ o”,“”,“ w”,“ o”,“ r”,“ l”,“ d”]

let str = "cdcd"
let characterArr = str.reduce(into: [Character]()) { result, letter in
result.append(letter)
}
print(characterArr)
//["c", "d", "c", "d"]