无法将类型为“Int”的值转换为预期的参数类型“UInt32”。

7

我正在尝试在Swift中生成一个随机数:

var amountOfQuestions = 2
var randomNumber = Int(arc4random_uniform(amountOfQuestions - 1)) + 1

但是这会导致以下错误:

无法将类型为 'Int' 的值转换为预期的参数类型 'UInt32'

问题出在哪里?有什么方法可以修复此错误吗?


你尝试将 (amountOfQuestions - 1) 转换为 UInt32 类型了吗? - yesthisisjoe
3个回答

7

声明amountOfQuestions为UInt32类型:

var amountOfQuestions: UInt32 = 2

PS:如果你想在语法上做到正确,应该使用“number of questions”。


5

首先:

方法“arc4random_uniform”需要一个UInt32类型的参数,因此当你进行减法运算时,它将你写的‘1’转换为UInt32。

其次:在Swift中,你不能从Int(在这种情况下是‘amountOfQuestions’)中减去一个UInt32(即公式中的‘1’)。

为了解决这个问题,你需要考虑将‘amountOfQuestions’的声明更改为:

var amountOfQuestions = UInt32(2)

那应该就可以了 :)


你的第二部分虽然部分正确(不能从Int中减去UInt32是正确的),但是不相关。在这种情况下,1将自动成为适当的类型,即Int,以匹配amountOfQuestions进行减法运算。问题在于该Int无法传递给arc4random_uniform,后者需要一个UInt32参数。请注意,使用“UInt32(2)-1”是完全有效的,结果也是UInt32(这就是为什么您的实际修复程序有效的原因)。 - David Berry
第二部分用于完成思路。在问题中提供的代码中,amountOfQuestions不是UInt32。我的答案只有一个解决方案,我只是把它分成两个部分让他更好理解。关于UInt32的完全有效的内容您所说的已知,但也完全无关紧要.... - gaskbr

4

将您的amountOfQuestions变量声明为UInt32,而不是编译器推断的Int

var amountOfQuestions: UInt32 = 2

// ...

var randomNumber = Int(arc4random_uniform(amountOfQuestions - 1)) + 1

arc4random_uniform 需要一个 UInt32 类型的参数。

根据 Darwin 文档

arc4random_uniform(u_int32_t upper_bound);

2
此外,值得注意的是,如果amountOfQuestions是通过计算获得的,例如从数组的大小中获取,那么适当的答案可能只是使用构造函数将其转换为UInt32,即UInt32(questions.count)。 - David Berry

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