當前位置:成語大全網 - 新華字典 - 為啥數組越界拋異常而字典確不會?

為啥數組越界拋異常而字典確不會?

在我們訪問數組的時候,如果發生了越界,那麽我們壹定會收到錯誤。以swift語言為例。

數組中只包含三個元素,但我們用下標10去訪問,發生越界錯誤。

但是當我們訪問壹個不在字典中的元素的時候,確不會發生類似的情況!

同樣的問題,不同的待遇,這是為啥呢?

我們來查看壹下swift中數組和字典下標訪問的實現。

比較兩者的實現,我們可以得到問題的原因:

所以對於數組而言,swift除了弄個fatalError以外,沒有其它的替代方案了。而字典返回的是optional類型值,如果發生什麽意外狀況,即使subscript不能throw errors,字典也可以悠然的返回壹個nil。

其實我們可以給數組做壹個擴展,實現壹個即使數組訪問越界也不會拋異常的版本。

我們使用 extension 關鍵字來給Array做壹個擴展,要註意的是:我們無法覆蓋原有的subscript方法,

我們只增加壹個新的subscript方法,並明確指定壹個外部參數就可以了,我們現在可以這樣訪問數組了。

我們需要在下標訪問的時候增加壹個label,這個時候雖然我們越界了,但我們卻像字典那樣,收獲了壹個nil。