【问题标题】:could not find an overload for '+' that accepts the supplied arguments找不到接受提供的参数的“+”的重载
【发布时间】:2014-06-04 16:43:06
【问题描述】:

所以我正在尝试将我用 Objective-C 制作的游戏转换为 Swift。

我试图让它工作,但它一直给我一个错误。

    var actualX = (Double(arc4random() ) % Double(rangeX) ) + Double(minX);

我也试过了:

    var actualX = (arc4random() % rangeX) + minX;

我看过 Stack Overflow 上其他类似问题的帖子,但没有一个能帮助或解决我的问题...

【问题讨论】:

  • rangeX 和 minX 是什么?
  • 如果您将Double(...) 放在整个第一个表达式周围,是否有效?喜欢Double(Double(arc4random()) % Double(rangeX))
  • 实际错误是什么?表达式中使用的变量的定义是什么?在这里帮助我们。
  • 实际错误是帖子的标题。 rangeX 和 minX 是初始化为整数的变量。 Double(...) 不起作用。

标签: swift


【解决方案1】:

arc4random() 返回 UInt32% 运算符的任何参数都必须是兼容类型。

将您的变量强制转换为UInt32。你没有提到它们是什么类型,但我假设它们是某种形式的整数。您显然可以稍后强制转换为另一种类型。

var actualX = (arc4random() % UInt32(rangeX)) + UInt32(minX)

这是 swift 中强类型的结果。

【讨论】:

  • 谢谢!!! :D 对编程还是很陌生,所以我不知道 arc4random 返回了那种类型的值。
  • 如果你按住command键,然后在你的代码中点击arc4random(),就会打开头文件,显示返回值。双击以在新窗口中打开。
【解决方案2】:

这对我来说很好用:

import Cocoa

let minX = 3.2
let rangeX = 42.0 

let actualX = (Double(arc4random()) % rangeX) + minX

由于 Swift 的类型推断,执行后 actualX 将是一个 Double。

@otherRepliants:当然 arc4random() 返回一个 UInt32,但为什么不将它转换为 Double。工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多