我想通过将一些字符转换为大写字母来修改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}个1个字符的数组是一个选项吗? (然后使用String
方法来上下每个String
答案 0 :(得分:13)
String
有upperCaseString
方法,但Character
没有。
原因是在德语等外来语言中,转换单一语言
字符大写可以导致多个字符:
print("ß".uppercaseString) // "SS"
toupper
/ tolower
函数不是Unicode安全的,不是
可以在Swift中找到。
所以你可以枚举字符串字符,将每个字符转换为 一个字符串,将其转换为大写/小写,并连接结果:
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
})
}
重新评论:如果条件需要检查多个 然后您可能想要创建所有字符的数组 第一:
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
}