Почему я не могу использовать глобальную переменную как часть определения другой глобальной переменной в Swift?

Я не понимаю, почему это запрещено в Swift:

let graphPointCircleDiameter: CGFloat = 5.0
let graphPointCircleDisplacement: CGFloat = graphPointCircleDiameter/2

Я получаю сообщение об ошибке:

Член экземпляра graphPointCircleDiameter не может использоваться с типом NameOfVC.

Может ли кто-нибудь объяснить, почему на статическую переменную let не может ссылаться другая переменная в глобальной области видимости в Swift?

Спасибо!


person jacquelion    schedule 07.06.2016    source источник
comment
Я думаю, вы захотите включить больше своего кода. Предоставленный вами код отлично работает на детской площадке (я только что проверил). Сообщение об ошибке, указывающее, что это член экземпляра, подразумевает, что присутствует как минимум определение класса ...   -  person Mark Bessey    schedule 08.06.2016
comment
вам нужно вычисляемое свойство var graphPointCircleDisplacement: CGFloat { return graphPointCircleDiameter/2 }   -  person Leo Dabus    schedule 08.06.2016


Ответы (1)


let определяет константу, а var определяет переменную. Если вы хотите назначить переменную из глобальной константы, вы можете вместо этого установить graphPointCircleDisplacement как lazy var:

let graphPointCircleDiameter: CGFloat = 5.0
lazy var graphPointCircleDisplacement: CGFloat = self.graphPointCircleDiameter/2

Как Лео Дабус упоминал, вы также можете вернуть значение константы, чтобы определить другую:

var graphPointCircleDisplacement: CGFloat { return graphPointCircleDiameter/2 }
person l'L'l    schedule 07.06.2016
comment
Можете ли вы объяснить, зачем нужно вычисляемое свойство или зачем нужно ленивое свойство var? Мне кажется, что должна быть возможность использовать глобальные переменные, которые являются константами в определении других глобальных переменных, например, в JavaScript. Связано ли это с инициализацией глобальных переменных в Swift? - person jacquelion; 09.06.2016