Swift错误:无法将类型为“Int32”的值转换为预期参数类型“Int32”。

4

我正在尝试编写一对函数,将一个String转换为[UInt8]字节数组并再次转换回来。

在从[UInt8] -> String的函数中,我正在尝试将单个Int32转换为Character

let num : Int32 = 5
let char = Character(_builtinUnicodeScalarLiteral: num)

但我收到了这个奇怪的错误信息:
error: cannot convert value of type 'Int32' to expected argument type 'Int32'
let char = Character(_builtinUnicodeScalarLiteral: num)
                                                   ^~~

编辑:我用不同的代码编写了我的函数,但我仍然对错误的含义感到好奇。


尝试不要设置 int32,Swift 应该通过 var data 自动识别。让 num = 5。 - Anton
修改了我的答案,同时解释了错误。 - fluidsonic
检查我的答案。要将[UInt8]->String转换回来,您可以使用reduce和map。 - user3441734
2个回答

1

请避免使用以_为前缀的类型、方法和初始化器,因为它们是私有的实现细节。同样,任何名称中带有builtin的内容也应该避免使用。

Character需要一个UnicodeScalar,可以从UInt32(还有UInt8)构造:

let num : UInt32 = 65
let g = Character(UnicodeScalar(num))
print(g) // prints 'A'

你的错误是因为你传递了一个 Int32,而Swift需要一个不同类型的 Builtin.Int32。错误信息并不够清晰。

它没有被声明为私有的,并且在苹果文档中有很好的记录。 - user3441734
@user3441734,它们在文档中列出,但没有解释。它们只是不打算被除了Swift本身以外的任何东西使用。 - fluidsonic

0

你可以这样使用该构造函数

let num: Int32 = 5
let g = Character(_builtinUnicodeScalarLiteral: num.value)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接