二进制运算符'*'不能应用于'CGRect'和'CGFloat'类型的操作数

时间:2019-02-10 03:04:59

标签: swift

我对二进制运算符有疑问,

scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height+(self.view.frame* (1/10) *CGFloat(UIImage.count)))

有问题CGRectInt

我认为问题是1/10,所以我将其替换为CGFloat(1/10)

scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height+(self.view.frame* *CGFloat(UIImage.count)))

但是现在,我收到了新的消息类型CGRectCGFloat

如何摆脱这个错误?

3 个答案:

答案 0 :(得分:0)

不能self.view.frame : CGRectCGFloat(1/10) : CGFloat相乘。

您可能忘记了在该width命令中选择heightself.view.frame。这样做之后,您将立即处理CGFloatCGFloat,这将消除错误。

替换:

CGSize(width: self.view.frame.width, height: self.view.frame.height + (self.view.frame * CGFloat(1/10) * CGFloat(UIImage.count)))

具有:

CGSize(width: self.view.frame.width, height: self.view.frame.height + (self.view.frame.<#width or height#> * CGFloat(1/10) * CGFloat(UIImage.count)))

并指定要width还是height

注释UIImage没有名为count的属性。

如@Rob所述,CGfloat(1/10)0.0,因此括号运算符将始终产生0,因为您要乘以0

答案 1 :(得分:0)

self.view.frame是CGRect,而CGFloat(1/10)是CGFloat,因此您不能在它们之间使用直接运算符*。就像Rob在评论中所说的那样,CGFloat(1/10)是0.0,所以您应该使用0.1。

要修复此问题,请使用以下行:

scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height+(self.view.frame.size.height * 0.1 * CGFloat(UIImage.count)))

希望这会有所帮助。

答案 2 :(得分:0)

您应该呆在1 / 10上,避免强制转换。将其更改为CGFloat(1/10)实际上会带来另一个问题,告诉编译器“嘿,尽管这是CGFloat参数,但我确实希望您进行1除以{{1} }(它为零!),然后将其强制转换为10。”

因此,您可以坚持使用CGFloat,因为该参数为1 / 10,所以它将正确执行正确的浮点数学运算。真正的问题很简单,就是您将CGFloat乘以view.frame,而不是1 / 10

view.frame.height

我不知道该scrollView.contentSize = CGSize(width: view.frame.width, height: view.frame.height + (view.frame.height * 1 / 10 * CGFloat(UIImage.count))) 引用的含义,因此我将其保留原样,但这显然是不正确的。


虽然上述方法非常有效,但是我们大多数人(来自其他语言)会明确将数字指定为浮点数,例如UIImage.count... * 1.0 / 10.0或其他任何数字,以使其完全明确我们不希望它做任何整数数学:

... * 0.1

在此特定示例中,这完全等同于上面的内容,但是使用scrollView.contentSize = CGSize(width: view.frame.width, height: view.frame.height + (view.frame.height / 10.0 * CGFloat(UIImage.count))) 而不是10.0绝对清楚地表明我们要进行浮点数学运算。