2016-01-14 20 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

相關問題