Раньше я задавал другой вопрос о том, как получить доступ к глобальной переменной в Swift, но понял, что глобальная переменная не работает для моих целей. Немного фона:
Игра представляет собой математическую/матчевую игру. У игроков будет уравнение, и они должны получить овцу с соответствующим ответом.
У меня есть овцы, которые появляются на экране. Каждая овца содержит уникальное значение int (1–12), которое генерируется в моем методе spawnSheep:
var sheepValue: Int = Int(arc4random_uniform(UInt32(12))+1)
На экране появится несколько овец, поэтому у каждой будет свое значение. Раньше глобальная переменная sheepValue обновляла значение всех овец до самой последней появившейся овцы, тем самым сводя на нет любую форму «уникальных» номеров для всех овец. У меня есть значения, преобразованные в строки, которые будут видны на каждой овце.
Вот фрагмент того, где я пытаюсь получить доступ к sheepValue вне функции, в которой оно было объявлено:
func checkCollisions() {
var hitSheep: [SKSpriteNode] = []
enumerateChildNodesWithName("sheep") { node, _ in
let sheep = node as SKSpriteNode
if CGRectIntersectsRect(sheep.frame, self.sandman.frame) {
if sheep.sheepValue == self.equation {
hitSheep.append(sheep)
}
sheep.sheepValue получает ошибку: 'SKSpriteNode не имеет члена с именем "sheepValue"
Но, насколько я понимаю, я могу установить свойства для своего SKSpriteNode (овца) и получить к нему доступ в этом синтаксисе. Но не переменные/целые числа? Я не уверен, что я делаю неправильно.
Еще несколько соображений: могу ли я просто использовать строковые значения для проверки значения sheepValues?? Если овца появляется с sheepValue, равным 5, то на овцы и в консоли. Это строковое значение сохраняется и действует так, как я хочу, чтобы действовала переменная int. Я думаю просто использовать строковые значения, чтобы проверить, равно ли sheepValue уравнению игрока. Но это потребовало бы преобразования большего количества целых чисел в большее количество строк, что требует немного больше работы.