Mr.*_*KLD 118 arrays string ios 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];
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 306
在Swift中更容易:
let string : String = "Hello "
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , , , , ]
Run Code Online (Sandbox Code Playgroud)
这使用了事实
Array
可以从a SequenceType
,和创建String
符合SequenceType
协议,其序列生成器枚举字符.由于Swift字符串完全支持Unicode,因此即使使用"基本多语言平面"之外的字符(例如)和扩展的字形集群(例如,实际上由两个 Unicode标量组成)也可以使用.
更新:从Swift 2开始, String
不再符合
SequenceType
,但characters
属性提供了一系列Unicode字符:
let string = "Hello "
let characters = Array(string.characters)
print(characters)
Run Code Online (Sandbox Code Playgroud)
这也适用于Swift 3.
更新:从Swift 4开始, String
(再次)是其Character
s 的集合
:
let string = "Hello "
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "", "", " ", ""]
Run Code Online (Sandbox Code Playgroud)
dev*_*oul 94
在Swift 4中,您不必characters
使用map()
.就map()
在String上做.
let letters = "ABC".map { String($0) }
print(letters) // ["A", "B", "C"]
print(type(of: letters)) // Array<String>
Run Code Online (Sandbox Code Playgroud)
或者,如果你更喜欢更短:"ABC".map(String.init)
(2字节)
在Swift 2和Swift 3中,您可以使用map()
函数characters
属性.
let letters = "ABC".characters.map { String($0) }
print(letters) // ["A", "B", "C"]
Run Code Online (Sandbox Code Playgroud)
接受的答案似乎不是最好的,因为序列转换String
不是String
序列,但是Character
:
$ swift
Welcome to Swift! Type :help for assistance.
1> Array("ABC")
$R0: [Character] = 3 values {
[0] = "A"
[1] = "B"
[2] = "C"
}
Run Code Online (Sandbox Code Playgroud)
以下内容适用于我:
let str = "ABC"
let arr = map(str) { s -> String in String(s) }
Run Code Online (Sandbox Code Playgroud)
map()
这里有一个全局函数的参考:http://swifter.natecook.com/func/map/
Ali*_*mad 21
对于 Swift 5.3 版本,它很简单:
let string = "Hello world"
let characters = Array(string)
print(characters)
Run Code Online (Sandbox Code Playgroud)
// [“你好世界”]
Fré*_*dda 14
String上还有这个有用的函数:components(separatedBy:String)
let string = "1;2;3"
let array = string.components(separatedBy: ";")
print(array) // returns ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)
适用于处理由";"之类的字符分隔的字符串 甚至"\n"
为Swift 4更新
这是3种方式。
//array of Characters
let charArr1 = [Character](myString)
//array of String.element
let charArr2 = Array(myString)
for char in myString {
//char is of type Character
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,人们真正想要的是一种将字符串转换为每个长度为1个字符的小字符串数组的方法。这是一种超级有效的方法:
//array of String
var strArr = myString.map { String($0)}
Run Code Online (Sandbox Code Playgroud)
迅捷3
这是3种方式。
let charArr1 = [Character](myString.characters)
let charArr2 = Array(myString.characters)
for char in myString.characters {
//char is of type Character
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,人们真正想要的是一种将字符串转换为每个长度为1个字符的小字符串数组的方法。这是一种超级有效的方法:
var strArr = myString.characters.map { String($0)}
Run Code Online (Sandbox Code Playgroud)
或者,您可以为String添加扩展名。
extension String {
func letterize() -> [Character] {
return Array(self.characters)
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以这样称呼它:
let charArr = "Cat".letterize()
Run Code Online (Sandbox Code Playgroud)
小智 5
一个简单的方法是对map
变量并将每个Character
作为 a返回String
:
let someText = "hello"
let array = someText.map({ String($0) }) // [String]
Run Code Online (Sandbox Code Playgroud)
输出应该是["h", "e", "l", "l", "o"]
.