2016-01-14 21 views
0

我是Swift中的新人。我创建了一个节点swift文件来存储节点信息。而另一个组快速文件是存储所有节点的组。为什么致命错误:数组索引超出范围时显示在Swift中打印数组的时间?

Node.swift的代码是这样的:

class Node { 

    var id:UInt8=0 
    var type:Int=0 
    var name:String="" 
    var bdAddr:NSUUID! 

    //The node private packet counter 
    var nodePktNum:Int=0 
} 

Group.swift的代码是这样的:

class Group { 

    var mLedDevice:[LedDevice]? = [LedDevice]() 

    class LedDevice { 
     var node   :Node? 
     var rssi   :Int? 
    } 

    func allocateNode() 
    { 
     print("mLedDevice![0].node = \(mLedDevice![0].node))") 
    } 

} 

当我尝试调用函数(allocateNode),并尝试通过print("mLedDevice![0].node = \(mLedDevice![0].node))")打印mLedDevice![0].node)

它显示错误fatal error: Array index out of range

我是否缺少初始化var mLedDevice:[LedDevice]? = [LedDevice]()的东西?

在此先感谢。

===================================编辑========== =======================

我想将项目添加到数组中,所以我创建了一个参数,如let let leddevice : LedDevice,并尝试给它一些价值。并将leddevice添加到array mLedDevice。但它显示constant 'leddevice' used before being initialized

如何给出let leddevice : LedDevice的init值?

func allocateNode() 
{ 
    let leddevice : LedDevice 
    leddevice.node?.id = UInt8(0) 
    leddevice.node!.bdAddr = NodeUUID 
    mLedDevice?.append(leddevice) 
} 
+0

您是否已将任何LedDevice对象添加到数组中。你创建了这个数组,但是在你尝试访问不存在的第一个元素(mLedDevice![0])后它是空的,这会产生错误 – Greg

+0

你的数组是空的,'allocateNode()'应该先将节点添加到数组,然后打印 – Cristik

+0

请阅读有关Swift语言指南中初始化的章节 – vadian

回答

1

我唯一能想到的就是这个数组是空的,即你试图访问那个数组的索引0,但不存在。

尝试以下,并可能看到阵列的内容后,给你如何解决这个问题的见解:

print("mLedDevice = \(mLedDevice))") 

换句话说,你是实例化一个不带元素的数组。

+0

谢谢!但是当我尝试将项目添加到数组中时遇到新问题。它显示在初始化之前使用常量'leddevice'...如何给它一个init值?在'LedDevice'类型中有很多参数... – Martin

+0

@Martin尝试使用var而不是let。这有帮助吗? –

+0

@Martin告诉我们代码,你给它的价值...它可能会进一步帮助 –

1

在你的代码

var mLedDevice:[LedDevice]? = [LedDevice]() 

你只初始化一个空数组行。之后尝试的是访问空白数组的第一个元素,该数组超出界限。

您的打印语句之前,您需要将项目添加到您的阵列

var ledDevice = LedDevice() 
mLedDevice.append(ledDevice) 

然后打印语句不会给你任何错误。

更新:回答为添加的问题

let leddevice : LedDevice是定义LedDevice类型的恒定的,但还没有被初始化,则在代码的下一行被使用。你应该用

let leddevice = LedDevice() 

这也将初始化变量。

注意:如果您有任何其他问题,你应该写一个新的问题。
注2:您是否读过关于初始化的任何guides

+0

谢谢!但是当我尝试将项目添加到数组中时遇到新问题。它显示在初始化之前使用常量'leddevice'...如何给它一个init值? 'LedDevice'类型有很多参数... – Martin

+0

@Martin更新了我的答案 – hannad

相关问题