Swift中的Unichar变量

Swift中的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

如何在Objective-C中的Swift likes
'\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版