Двоичный оператор '*' нельзя применить к операндам типа 'CGRect' и 'CGFloat' - PullRequest
0 голосов
/ 10 февраля 2019

У меня проблема с бинарным оператором,

, который

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

имеет проблемы CGRect и Int.

Я думал, что проблема была 1/10, поэтому я заменил это на CGFloat(1/10):

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

Но теперь я получил новый тип сообщения CGRect и CGFloat

Как мне избавиться от этой ошибки

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

self.view.frame - это CGRect, а CGFloat(1/10) - это CGFloat, поэтому вы не можете сделать прямой оператор * между ними.Также, как сказал Роб в комментарии, 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)))

Надеюсь, это поможет.

0 голосов
/ 10 февраля 2019

Вы должны были остаться с 1 / 10, избегая приведения.Изменение этого значения на CGFloat(1/10) фактически создает другую проблему, говоря компилятору: «эй, хотя это параметр CGFloat, я действительно хочу, чтобы вы делали целочисленную математику из 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 вместо 10 делаетабсолютно ясно, что мы хотим сделать математику с плавающей точкой.

0 голосов
/ 10 февраля 2019

Вы не можете умножить self.view.frame : CGRect на CGFloat(1/10) : CGFloat.

Возможно, вы забыли выбрать width или height в этой команде self.view.frame.Как только вы это сделаете, вы будете иметь дело с CGFloat и CGFloat, и это избавит от ошибки.

Замените:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...