Swift 2 : 迭代和 upper/lower 大小写一些字符
Swift 2 : Iterating and upper/lower case some characters
我想修改 Swift 字符串,将一些字符转换为大写,将另一些转换为小写。
在 Obj-c 中我有以下内容:
- (NSString*) lowercaseDestination:(NSString*) string {
NSUInteger length = string.length;
unichar buf[length+1];
[string getCharacters:buf];
BOOL up = true;
for (int i=0; i< length ; i++) {
unichar chr = buf[i];
if( .... ) {
buf[i] = toupper(chr);
} else {
buf[i] = tolower(chr);
}
}
string = [NSString stringWithCharacters:buf length:length];
return string;
在 Swift 2 中你会怎么做?
我没有找到任何 Character
大小写的方法。
是否可以选择 1 个字符的 String
数组? (然后用String
方法上下各String
String
有一个 upperCaseString
方法,但是 Character
没有。
原因是在像德语这样的外来语言中,转换一个
字符转大写可能导致多个字符:
print("ß".uppercaseString) // "SS"
toupper
/tolower
函数不是 Unicode 安全的,也不是
Swift.
可用
所以你可以枚举字符串字符,将每个字符转换为
一个字符串,将其转换为 upper/lowercase,然后连接结果:
func lowercaseDestination(str : String) -> String {
var result = ""
for c in str.characters {
let s = String(c)
if condition {
result += s.lowercaseString
} else {
result += s.uppercaseString
}
}
return result
}
可以更简洁地写成
func lowercaseDestination(str : String) -> String {
return "".join(str.characters.map { c -> String in
let s = String(c)
return condition ? s.lowercaseString : s.uppercaseString
})
}
回复你的评论:如果条件需要检查一个以上
字符 那么你可能想要创建一个包含所有字符的 array
第一:
func lowercaseDestination(str : String) -> String {
var result = ""
let characters = Array(str.characters)
for i in 0 ..< characters.count {
let s = String(characters[i])
if condition {
result += s.lowercaseString
} else {
result += s.uppercaseString
}
}
return result
}
我想修改 Swift 字符串,将一些字符转换为大写,将另一些转换为小写。
在 Obj-c 中我有以下内容:
- (NSString*) lowercaseDestination:(NSString*) string {
NSUInteger length = string.length;
unichar buf[length+1];
[string getCharacters:buf];
BOOL up = true;
for (int i=0; i< length ; i++) {
unichar chr = buf[i];
if( .... ) {
buf[i] = toupper(chr);
} else {
buf[i] = tolower(chr);
}
}
string = [NSString stringWithCharacters:buf length:length];
return string;
在 Swift 2 中你会怎么做?
我没有找到任何 Character
大小写的方法。
是否可以选择 1 个字符的 String
数组? (然后用String
方法上下各String
String
有一个 upperCaseString
方法,但是 Character
没有。
原因是在像德语这样的外来语言中,转换一个
字符转大写可能导致多个字符:
print("ß".uppercaseString) // "SS"
toupper
/tolower
函数不是 Unicode 安全的,也不是
Swift.
所以你可以枚举字符串字符,将每个字符转换为 一个字符串,将其转换为 upper/lowercase,然后连接结果:
func lowercaseDestination(str : String) -> String {
var result = ""
for c in str.characters {
let s = String(c)
if condition {
result += s.lowercaseString
} else {
result += s.uppercaseString
}
}
return result
}
可以更简洁地写成
func lowercaseDestination(str : String) -> String {
return "".join(str.characters.map { c -> String in
let s = String(c)
return condition ? s.lowercaseString : s.uppercaseString
})
}
回复你的评论:如果条件需要检查一个以上 字符 那么你可能想要创建一个包含所有字符的 array 第一:
func lowercaseDestination(str : String) -> String {
var result = ""
let characters = Array(str.characters)
for i in 0 ..< characters.count {
let s = String(characters[i])
if condition {
result += s.lowercaseString
} else {
result += s.uppercaseString
}
}
return result
}