在ios開發過程中,避免不了要從遠端請求資料。有時候我們拿到的可能會是乙個空得陣列(當然返回nil的可能小很小)。那麼就必要對其進行非空判斷,以確保我們專案的穩定性。
假設我們從遠端請求到一組資料array,一般會這樣處理:
nsarray *array = /***/;
if (!array) else
或者
if (array.count == 0)
else
其實這樣判斷是不夠全面的。因為我們在處理網路請求的資料時,獲取到的很有可能是乙個nsnull
物件,在控制台上顯示為
。這個類較為特殊,它和nil的意思一樣,都是代表陣列為nil,但它只有乙個類方法+(nsnull)null
,也就是說它並不會接受陣列的那些方法。如果我們在返回為
的時候訪問nsarray
的方法或者屬性都是不被允許的,將會導致程式崩潰。
經過上面的分析我們知道,在處理陣列的時候,就有必要考慮到這種情況。
if (![array iskindofclass:[nsnull class]] && array.count > 0 && array != nil)
這樣就確保了陣列不是nil
物件,也不是nsnull
物件,並且至少有乙個元素的。
但這樣的判斷條件,看起來太繁瑣了,有沒有簡單的點呢?當然有。
array.count > 0
其實就包含了array != nil
這種情況。那麼就可以用更簡便的方式去判斷陣列非空的情況。
if ([array iskindofclass:[nsarray class]] && array.count > 0)
首先我們要確保返回資料的確是陣列nsarray
型別的,其次保證陣列中至少包含有乙個元素。當然,需不需要對陣列的元素個數做出判斷,可以視情況而定。但必須確保是nsarray
型別,而非nsnull
等其他型別。 iOS開發中,陣列為空的判斷處理
原帖 這篇文章主要來說一下,nsarray判斷是否為空需要注意的問題。有些開發者,在判斷陣列是否為空時,會寫成 if array nil 複製 或是 if array.count 0 複製 其實嚴格來說,這兩種寫法,都是考慮不足並且不穩定的,並且忽略了一種更常見的情況。首先來說一下,二者之間的區別。...
iOS中處理空資料
今天無意間看到有朋友問處理那些繁瑣的空資料問題,本人以前做過類似的處理,現在由於知識有限,能想到的就是利用遞迴的方式進行處理。import checktool.h implementation checktool 主要呼叫該方法 id replacenulldata id obj else if o...
處理 JSON null 和空陣列及物件
描述了對 json 資料中使用的 null 和空陣列及物件的處理。json 資料具有 null 和空陣列及物件的概念。此部分說明其中每個概念如何對映到 null 和未設定的資料物件概念。json 具有特殊值 null,可以對任何資料型別設定該值,包括陣列 物件 數字和布林型別。34 當序列化為 js...