Swift 2中不同整数大小之间的转换
我正在尝试让这段代码在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也无法解决问题。以下是我如何使
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
。