【问题标题】:Cannot convert value of type 'Int' to expected argument type 'UInt32'无法将“Int”类型的值转换为预期的参数类型“UInt32”
【发布时间】:2016-06-04 09:50:46
【问题描述】:

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

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

但这会导致错误:

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

有什么问题?有什么想法可以解决这个错误吗?

【问题讨论】:

  • 您是否尝试将 (amountOfQuestions - 1) 转换为 UInt32?

标签: ios swift integer arc4random uint32


【解决方案1】:

第一件事: 方法“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(这就是你的实际修复工作的原因)
  • 第二部分用来补全思路。在问题提供的代码中,amountOfQuestions 不是 UInt32。我的答案只有一个解决方案,我只是打破了两个让他更好地理解它。你所说的对 UInt32 完全有效是众所周知的,而且完全无关紧要......
【解决方案2】:

将 amountOfQuestions 声明为 UInt32:

var amountOfQuestions: UInt32 = 2

PS:如果您想在语法上正确,这是 number 个问题。

【讨论】:

    【解决方案3】:

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

    var amountOfQuestions: UInt32 = 2
    
    // ...
    
    var randomNumber = Int(arc4random_uniform(amountOfQuestions - 1)) + 1
    

    arc4random_uniform 需要 UInt32

    来自Darwin docs

    arc4random_uniform(u_int32_t upper_bound);
    

    【讨论】:

    • 此外,值得注意的是,如果 amountOfQuestions 被计算,例如从数组的大小,适当的答案可能只是使用构造函数将其转换为 UInt32,即 UInt32( questions.count)。
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2017-01-09
    • 2017-02-08
    相关资源
    最近更新 更多