2016-01-11 1 views
0

Вот моя детская площадка код:У меня есть EXC_BAD_INSTRUCTION с Swift 2.1.1 на детской площадке и нуждаются в помощи, чтобы определить его

import UIKit 

class CellularAutomata{ 

    var array = Array(count:1, repeatedValue:Array(count: 1, repeatedValue: Bool())) 
    var chanceToStartAlive = 0.45 
    var width = 384 
    var height = 384 

    init(){ 
     self.array = Array(count:self.width, repeatedValue:Array(count: self.height, repeatedValue: Bool())) 
     initialise() 
    } 
    init(chanceToStartAlive chance: Double){ 
     chanceToStartAlive = chance 
     self.array = Array(count:self.width, repeatedValue:Array(count: self.height, repeatedValue: Bool())) 
     initialise() 
    } 
    init(chanceToStartAlive chance: Double, width columns: Int, height rows: Int){ 
     chanceToStartAlive = chance 
     self.array = Array(count:columns, repeatedValue:Array(count: rows , repeatedValue: Bool())) 
     initialise() 
    } 

    func initialise(){ 
     for index in 0...array.count{ 
      for jndex in 0...array[index].count{ 
       if(randomCGDouble() < self.chanceToStartAlive){ 
        array[index][jndex] = true 
       } 
      } 
     } 
    } 

    func randomCGDouble() -> Double { 
     return Double(arc4random())/Double(UInt32.max) 
    } 
} 

Плохая инструкция возникает, когда функция инициализации() вызывается. Я чувствую, что я упускаю из виду какую-то вещь, которая действительно очевидна, и я буду лицом к лицу, когда кто-то объяснит это мне.

EDIT: Sorry Все! Я понял, что сделал что-то немое. Мне нужно сделать .count - 1 на массивах. Как я уже сказал, ладонь. Я понял это, как только обнаружил, что вы можете активировать консоль на игровой площадке и, наконец, получить некоторую обратную выходную информацию об ошибках.

+0

Можете ли вы опубликовать полезное сообщение об ошибке? EXC_BAD_INSTRUCTION означает, что что-то пошло не так. Не полезно. – gnasher729

+0

И насколько велики вы сделали свой массив? – gnasher729

+0

См. Мой ответ и ответ luk2302, почему это было неправильно. Это была такая простая ошибка .... – daredevil1234

ответ

0

Вы должны изменить свой initialise к

func initialise(){ 
    print(array.count) 
    for index in 0..<array.count{ 
     for jndex in 0..<array[index].count{ 
      if(randomCGDouble() < self.chanceToStartAlive){ 
       array[index][jndex] = true 
      } 
     } 
    } 
} 

Обратите внимание на 0..<array в двух петлях вместо прежних 0...array. Это предотвратит выход индекса из пределов.

Обратите внимание, что массив довольно большой - попробуйте его проверить с помощью width и height12.

+0

Да, это сработало бы, подобно тому, что я сделал в моем редактировании. – daredevil1234

+0

Пожалуйста, избегайте C Style для циклов, они будут удалены с языка. Как вы можете видеть, они подвержены ошибкам. – tmpz

+1

@ tmpz: В соответствии с этим: https://github.com/apple/swift-evolution/blob/master/proposals/0007-remove-c-style-for-loops.md Петли для включения будут сохранены. Удаляются вещи, которые выглядят так: для var i = 0; i <10; i ++ { print (i) } – daredevil1234