Swift中的Unichar变量
如何在Objective-C中的Swift likesSwift中的Unichar变量,swift,unichar,Swift,Unichar,如何在Objective-C中的Swift likes'\0''\n'中定义unichar类型变量 以迅捷的速度 func previousCharacter() -> unichar { return "\n" //Error } 编译器给了我一个错误: 无法将“String”类型的返回表达式转换为预期的返回类型“unichar” 但在Objective-C中,直接执行此操作将更容易。在Swift中,字符文字的类型为character let exclamationMa
'\0'
'\n'
中定义unichar
类型变量
以迅捷的速度
func previousCharacter() -> unichar {
return "\n" //Error
}
编译器给了我一个错误:
无法将“String”类型的返回表达式转换为预期的返回类型“unichar”
但在Objective-C中,直接执行此操作将更容易。在Swift中,字符文字的类型为
character
let exclamationMark: Character = "!"
看
对于高级读者:
您还可以扩展unichar
,使其能够接受字符文字:
extension unichar : UnicodeScalarLiteralConvertible {
public typealias UnicodeScalarLiteralType = UnicodeScalar
public init(unicodeScalarLiteral scalar: UnicodeScalar) {
self.init(scalar.value)
}
}
let newLine: unichar = "\n"
let whitespaces = NSCharacterSet.whitespaceAndNewlineCharacterSet()
print("C is whitespace \(whitespaces.characterIsMember(newLine))")
但是,请注意,Swift文本使用4个字节,而
unichar
仅使用2个字节,因此,当转换为unichar
时,某些字符将被截断。您可以使用相同的方法进行转换。。。但是有“”标志。或者,如果您的意思是unicode,您会这样做:“\u{24}”@arbiutr”符号将被识别为字符串类型使用字符它必须完全是unichar类型吗?你需要它与Objective-C或C代码接口吗?快告诉我吧。。。我最初试图在unichar上做一个扩展,它定义了一个方便的初始值设定项。在进一步阅读本主题之后:这实际上并不需要Swift 2.0,并且在当前版本中工作得非常好。您正在扩展的unichar不是协议而是结构;)此外,您可以直接使用UnicodeScalar
作为UnicodeScalarLiteralType
,并去掉let。它所做的只是用另一个UnicodeScalar
初始化一个UnicodeScalar
。最后,您不需要在值类型前面加上unichar。
typealias的作用域是任意的,即使您在全局级别声明了一个名称相同的别名,它也会选择您在扩展名中声明的一个。@TimBodeit谢谢,已经更新了代码。我在编译器崩溃时遇到了很多问题,所以我花了很长时间才找到一个有效的语法。应该使用一个稳定的Xcode版本:P这里不需要beta版