Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 2中不同整数大小之间的转换_Swift - Fatal编程技术网

Swift 2中不同整数大小之间的转换

Swift 2中不同整数大小之间的转换,swift,Swift,我正在尝试让这段代码在Swift 2中工作: func +(left: Character, right: Int) -> String { return String(UnicodeScalar(String(left).utf16[0] + right)) } 它正在使用旧版本的Swift 首先,我在utf16[0].value中转换了utf16[0],但它表示二进制运算符+不能应用于Int 16和Int类型的操作数 同样,将权限设置为Int16也无法解决问题。以下是我如何使

我正在尝试让这段代码在Swift 2中工作:

func +(left: Character, right: Int) -> String {
    return String(UnicodeScalar(String(left).utf16[0] + right))
}
它正在使用旧版本的Swift

首先,我在
utf16[0].value中转换了
utf16[0]
,但它表示
二进制运算符+不能应用于Int 16和Int
类型的操作数


同样,将
权限设置为Int16也无法解决问题。

以下是我如何使其与
utf16
一起工作的

func +(left: Character, right: Int) -> String {
    let scalars = String(left).utf16
    let value = scalars[scalars.startIndex].value as Int
    return String(UnicodeScalar(value + right))
}
使用
unicodeScalars
似乎更为自然

func +(left: Character, right: Int) -> String {
    let scalars = String(left).unicodeScalars
    let value = Int(scalars[scalars.startIndex].value)
    return String(UnicodeScalar(value + right))
}

我是通过以下方式实现的:

func +(left: Character, right: Int) -> String {
    return String(UnicodeScalar(Int(String(left).utf16.first!) + right))
}

第一个版本从Xcode 7 beta 6开始就不会编译(Int16不能转换为Int)。另一个是编译的,我把它重写成一行。请注意,您可以使用
first
访问scalars集合的第一个索引:
返回字符串(UnicodeScalar(Int(String(left).UnicodeScalar.first!.value)+right))
它非常类似于您的单行程序,我在找到解决方案之前没有看到它。奇怪的是,从CodeUnit到Int的转换成功,但是Int16失败了!也就是说,如果使用
.value
它将失败。是。这就是我花了这么长时间的原因。我一直在研究这个问题。这很奇怪,因为您可以使用
Int16
初始化
Int