數組中只包含三個元素,但我們用下標10去訪問,發生越界錯誤。
但是當我們訪問壹個不在字典中的元素的時候,確不會發生類似的情況!
同樣的問題,不同的待遇,這是為啥呢?
我們來查看壹下swift中數組和字典下標訪問的實現。
比較兩者的實現,我們可以得到問題的原因:
所以對於數組而言,swift除了弄個fatalError以外,沒有其它的替代方案了。而字典返回的是optional類型值,如果發生什麽意外狀況,即使subscript不能throw errors,字典也可以悠然的返回壹個nil。
其實我們可以給數組做壹個擴展,實現壹個即使數組訪問越界也不會拋異常的版本。
我們使用 extension 關鍵字來給Array做壹個擴展,要註意的是:我們無法覆蓋原有的subscript方法,
我們只增加壹個新的subscript方法,並明確指定壹個外部參數就可以了,我們現在可以這樣訪問數組了。
我們需要在下標訪問的時候增加壹個label,這個時候雖然我們越界了,但我們卻像字典那樣,收獲了壹個nil。