我想做的就是将单个的Character
转换为大写,而不需要将其转换为String
,然后调用.uppercased()
。有没有内置的方法可以做到这一点,或者有没有办法让我从C中调用toupper()
函数而不进行任何桥接?我真的不认为我应该为了如此简单的事情而额外操作。
我想做的就是将单个的Character
转换为大写,而不需要将其转换为String
,然后调用.uppercased()
。有没有内置的方法可以做到这一点,或者有没有办法让我从C中调用toupper()
函数而不进行任何桥接?我真的不认为我应该为了如此简单的事情而额外操作。
调用 C 中的 toupper()
函数需要获取 Character
的 Unicode 代码点。但是,Character
没有获取其代码点的方法(一个 Character
可由多个代码点组成),因此您必须将 Character
转换为 String
才能获取其任何代码点。
因此,您确实需要转换为 String
才能取得进展。除非您将字符存储为 UnicodeScalar
而不是 Character
。在这种情况下,您可以使用以下方法:
assert(unicodeScalar.isASCII) // toupper argument must be "representable as an unsigned char"
let uppercase = UnicodeScalar(toupper(CInt(unicodeScalar.value)))
但这并不比简单地使用String
更易读:
let uppercase = Character(String(character).uppercased())
character = "ß"
(这些德国人太疯狂了:) - Martin R看起来自从问这个问题以来,Swift 中为 Character
添加了 .uppercased()
方法,所以无需再担心将其转换为 String
或使用 C bridging。
只需将此添加到您的程序中
extension Character {
//converts a character to uppercase
func convertToUpperCase() -> Character {
if(self.isUppercase){
return self
}
return Character(self.uppercased())
}
}
toupper()
只能操作char
类型的变量,并且与语言环境相关。 - Martin R