2015-04-22 7 views
0

Здравствуйте, Im, в настоящее время использующий swift в xCode, и у меня есть генератор случайных чисел, который создает случайную точку в представлении.Как сделать глобальную переменную, которая использует «self» в Swift

 func randomInRange(lo: Int, hi : Int) -> Int { 
      return lo + Int(arc4random_uniform(UInt32(hi - lo + 1))) 
     } 
     // x coordinate between MinX (left) and MaxX (right): 
     let randomX = randomInRange(Int(CGRectGetMinX(self.frame) * 2), Int(CGRectGetMaxX(self.frame))) 
     // y coordinate between MinY (top) and MidY (bottom): 
     let randomY = randomInRange(Int(CGRectGetMinY(self.frame) * 2), Int(CGRectGetMaxY(self.frame))) 
     let randomPoint = CGPoint(x: randomX , y: randomY) 

Я хотел бы глобальное использование этого переменный, так что я могу использовать эту случайную точку несколько раз, а затем выписать этот весь блок кода каждый раз. Теперь я знаю, что вы можете создать глобальную переменную, объявив его выше классом GameScene или в промежутке между классом и viewDidLoad как такой

class GameScene: SKScene , SKPhysicsContactDelegate { 


func randomInRange(lo: Int, hi : Int) -> Int { 
    return lo + Int(arc4random_uniform(UInt32(hi - lo + 1))) 
} 
// x coordinate between MinX (left) and MaxX (right): 
let randomX = randomInRange(Int(CGRectGetMinX(self.frame) * 2), Int(CGRectGetMaxX(self.frame))) 
// y coordinate between MinY (top) and MidY (bottom): 
let randomY = randomInRange(Int(CGRectGetMinY(self.frame) * 2), Int(CGRectGetMaxY(self.frame))) 
let randomPoint = CGPoint(x: randomX , y: randomY) 


override func didMoveToView(view: SKView) { 
    /* Setup your scene here */ 

Однако, когда я ставлю его выше того же класса сцены я получаю сообщение об ошибке. .. «Использование неразрешенного идентификатора self» И когда я установил его между классом gameScene и viewDidLoad, я получаю ошибку ... gameScene не имеет члена с именем self. Если возможно, есть способ заменить себя чем-то другим в отношении представления, если да, ответьте. Спасибо!

+1

Используйте одноэлементный класс, чтобы поделиться им. –

+0

Вы хотите использовать это однократно вычислимое свойство как глобальное const или иметь возможность многократно его вычислять в разных контроллерах/представлениях? – Kubba

+0

Я не совсем уверен, как использовать или создавать классы singleton, Как я могу реализовать свою случайную точку в одном? также где находится класс? спасибо Thomas –

ответ

0

Вы можете использовать синглтон так:

class MyGlobalCounters { 
    var counter = 0 
    var this = "Hello" 
    var that:CGFloat = 1.23 

    class var sharedInstance : MyGlobalCounters { 
    return _SingletonSharedInstance 
    } 
} 
private let _SingletonSharedInstance = MyGlobalCounters() 


class A { 
    let myGlobalCounters = MyGlobalCounters.sharedInstance 
    func dumpAndInc() { 
    println("ctr=\(myGlobalCounters.counter++)") 
    } 
} 

class B { 
    let myGlobalCounters = MyGlobalCounters.sharedInstance 
    func dumpAndInc() { 
    println("ctr=\(myGlobalCounters.counter++)") 
    } 
} 
let a = A() 
let b = B() 
a.dumpAndInc() 
b.dumpAndInc() // in b we use the same instance for the counters 
a.dumpAndInc() // as in a 
Смежные вопросы