致命错误 索引超出范围

Posted

技术标签:

【中文标题】致命错误 索引超出范围【英文标题】:fatal error Index out of range 【发布时间】:2016-06-14 11:20:58 【问题描述】:

我不明白哪里出错了。请帮我解决这个问题。

这是我的代码:

import SpriteKit

class EncounterManager 
    let encounterNames: [String] = ["EncounterName1",
                                    "EncountersName2",
                                    "EncountersName3"]
    var encounters: [SKNode] = []

    var currentEncounterIndex:Int?

    var previousEncounterIndex:Int?


    init() 
        for encounterFileName in encounterNames 
            let encounter = SKNode()
            if let encounterScene = SKScene(fileNamed: encounterFileName) 
                for placeholder in encounterScene.children 

                    if let node = placeholder as? SKNode 

                        switch node.name! 
                        case "N" :
                            let n = N()
                            n.spawn(encounter, position: node.position)

                        case "NN":
                            let nn = NN()
                            nn.spawn(encounter, position: node.position)

                        case "NNN":
                            let nnn  = NNN()
                            nnn.spawn(encounter, position: node.position)

                        case "GGG":
                            let ggg = GGG()
                            ggg.spawn(encounter, position: node.position)

                        case "GG":
                            let gg = GG()
                            gg.spawn(encounter, position: node.position)

                        case "G":
                            let g = G()
                            g.spawn(encounter, position: node.position)

                        case "F":
                            let f = F()
                            ff.spawn(encounter, position: node.position)

                        default:
                            print("Name error: \(node.name)")
                    
                
            
        
    


    func addToWorld(world:SKNode) 

        for index in (encounters.count).stride(through: 0, by: -1) 

            encounters[index].position = CGPoint(x: -2000, y: index * 1000)
            world.addChild(encounters[index])

       

   


这是来自控制台的错误:

fatal error: Index out of range

这是错误所在的行:

encounters[index].position = CGPoint(x: -2000, y: index * 1000)

这是行错误:

EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, subcode=0x0)

我试图在互联网上找到有关此问题的一些信息,但找不到。

【问题讨论】:

提示:count 元素的数组中最后一个元素的索引是多少? 【参考方案1】:

改变这一行:

for index in (encounters.count).stride(through: 0, by: -1)

到这里:

for index in (encounters.count.predecessor()).stride(through: 0, by: -1)

您收到错误是因为使用第一个版本,步幅从 encounters.count 开始,它位于最后一个有效索引的后面。

【讨论】:

或:for index in encounters.indices.reverse() ... @Viktor Simkó 它有助于在第一个文件中修复它,但现在我在另一个文件中有这个错误。行内:`遇到管理器.encounters[0].position = CGPoint(x: 300, y: 30)` @MartinR 它有助于在第一个文件中修复它,但现在我在另一个文件中有这个错误。行内:`遇到管理器.encounters[0].position = CGPoint(x: 300, y: 30)`

以上是关于致命错误 索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章

Swift 致命错误:数组索引超出范围

Swift 致命错误:数组索引超出范围

致命错误 索引超出范围

致命错误:索引超出范围

致命错误:索引超出范围:Swift

(Swift) 致命错误:索引超出范围