【发布时间】:2018-03-08 20:53:36
【问题描述】:
我不小心写了这个简单的代码来在终端打印字母:
var alpha:Int = 97
while (alpha <= 122) {
write(1, &alpha, 1)
alpha += 1
}
write(1, "\n", 1)
//I'm using write() function from C, to avoid newline on each symbol
我得到了这个输出:
abcdefghijklmnopqrstuvwxyz
Program ended with exit code: 0
那么,问题来了:它为什么有效? 在我的逻辑中,它应该显示一行数字,因为正在使用一个整数变量。在 C 中,它是一个 char 变量,所以我们的意思是我们指向 ASCII 中某个索引处的一个符号。那么:
char alpha = 97;
将是一个指向“a”符号的代码点,通过在循环中递增 alpha 变量,我们将显示 ascii 到第 122 个的每个元素。
不过,在 Swift 中,我无法将整数分配给 Character 或 String 类型的变量。我使用了 Integer,然后声明了几个变量来分配 UnicodeScalar,但意外地发现,当我调用 write 时,我指向的是我的整数,而不是 UnicodeScalar 类型的新变量,尽管它可以工作!代码非常简短易读,但我完全不明白它是如何工作的,以及为什么。
有人遇到过这种情况吗?
【问题讨论】: