为什么致命的错误:当Swift中的打印数组时,数组索引超出范围?

时间:2016-01-14 08:43:22

标签: swift

我是Swift的新手。我创建了一个节点swift 文件来存储节点信息。另一个组swift 文件是一个存储所有节点的组。

timeuuid 的代码如下所示:

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

打印mLedDevice![0].node)

显示错误print("mLedDevice![0].node = \(mLedDevice![0].node))")

我是否遗漏了初始化fatal error: Array index out of range的内容?

提前致谢。

=================================== EDIT =========== ======================

我想将项目添加到数组中,因此我创建了一个像let var mLedDevice:[LedDevice]? = [LedDevice]()这样的参数,并尝试给它一些值。并将leddevice添加到let leddevice : LedDevice。但它显示 array mLedDevice

如何为constant 'leddevice' used before being initialized提供初始值?

let leddevice : LedDevice

2 个答案:

答案 0 :(得分:1)

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

尝试以下内容,它可以让您在看到数组内容后了解如何解决它:

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

换句话说,您正在实例化一个没有元素的数组。

答案 1 :(得分:1)

在您的代码行中

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

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

在打印声明之前,您需要向数组中添加项目

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

然后你的print语句不会给你任何错误。

更新:回答添加的问题

let leddevice : LedDevice定义了LedDevice类型的常量,但尚未初始化,然后在下一行代码中使用它。你应该用

替换它
let leddevice = LedDevice()

这也将初始化变量。

注意:如果您有任何其他问题,您应该为此写一个新问题 注2:您是否阅读了有关初始化的任何guides