一尘不染

Swift运算符“ *”在两个Int上引发错误

swift

我在这里有一个非常奇怪的错误,我已经到处搜索,并且尝试了所有建议。没有工作。

scrollView.contentSize.height = 325 * globals.defaults.integer(forKey: "numCards")

二进制运算符’*’不能应用于两个’Int’操作数

WTF迅捷!为什么不?我Ints一直都在繁殖。这 两个Ints
globals.defaults只是的一个实例UserDefaults.standard。我每次都尝试以下相同的错误。

325 * Int(globals.defaults.integer(forKey: "numCards")   //NOPE

Int(325) * Int(globals.defaults.integer(forKey: "numCards"))  //NOPE

if let h = globals.defaults.integer(forKey: "numCards"){
    325 * h  //NOPE, and 'Initializer for conditional binding must have optional type, not Int'
}

let h = globals.defaults.integer(forKey: "numCards") as! Int
325 * h //NOPE, and 'Forced cast of Int of same type as no affect'

325 * 2 //YES!  But no shit...

所有这些“尝试”似乎都在浪费时间,因为我知道这两个事实都是Ints……而且我是正确的。请指教。谢谢!


阅读 268

收藏
2020-07-07

共1个答案

一尘不染

该错误具有误导性。问题实际上是尝试将Int值分配给CGFloat变量。

这将起作用:

scrollView.contentSize.height = CGFloat(325 * globals.defaults.integer(forKey: "numCards"))

产生误导性错误的原因(由于下面的评论中的Daniel
Hall)是由于编译器选择了需要返回值的*函数而返回的CGFloat。此功能需要两个CGFloat参数。由于提供的两个参数Int不是CGFloat,所以编译器提供了误导性错误:

二进制运算符’*’不能应用于两个’Int’操作数

如果错误更像是:

二进制运算符’*’不能应用于两个’Int’操作数。期望两个“ CGFloat”操作数。

2020-07-07