想要做出以上的簡單顯示,一直遇到奇怪的問題。我相信那都是因為我觀念操作錯誤。所以在這裡記錄下來。
下載一個Xcode project想參考但它選單中沒有simulator。
print都print不出來,console永遠一片空白。
JSON第一層是Array時,如何解析?
index Out of range
改動了無關的程式碼,卻影響了build出來的結果。
下載一個Xcode project想參考但它選單中沒有simulator。
無法build,後來發現選單中沒有模擬器。
我試著調整Xcode版本,後來就成功了。
從14.5調整到13.1(調低的概念)
模擬器出現了,選好模擬器後,就可以成功build了。
print都print不出來,console永遠一片空白。
後來發現是我根本沒有把會print出東西的視窗打開。
下面這塊區域叫做debug area。有左右視窗。
左邊是Variables view ,右邊是 debug console。
JSON第一層是Array時,如何解析?
參考此文章 :利用 JSONDecoder 和 Codable 解析 JSON 和生成自訂型別資料
上櫃投信買賣超JSON是一個Array,Array中的各個Dictionary則儲存每支股票的資訊。
先將每支股票的Dictionary模擬好:
接著在下載資料時,直接把下載到資料的型別寫成剛剛寫好的struct加上Array,所以是[FundData]
。
index Out of range
每次使用tableView時,我都會不斷遇到index Out of range。
看到index Out of range就要檢查:
這個Array是不是空的?
Array中目前的內容狀況?
numberOfRowsInSection
指定的 row數,是否該用別的方式指派?
下圖為,我要顯示theFunds
這個array中的所有物件。一開始不確定theFunds
是否有物件在裡面,所以numberOfRowsInSection
我直接先return2。
但結果就是cellForRowAt
這個func中let fund = theFunds[indexPath.row]
會顯示indexOutOfRange。
我在想是不是2太少了,於是把它改成100。
但還是一樣indexOutOfRange。
後來直接改成整個array中物件的數量theFunds.count
,就沒有出現indexOutOfRange了。
改動了無關的程式碼,卻影響了build出來的結果。
func updateWithIndex(indexPath:IndexPath)
第31行這個func會在viewController中的cellForRowAt被呼叫,然後把indexPath進func,一般來說應該要可以直接在func中被使用。然而build出來是一片空白。
而當我在func外面,先做一個變數。接著在func中把indexPath這個參數的內容存入變數後,我的app build出來了。 雖然第35行dateLabel.text = “\(indexPath.row)”
寫得完全一樣。
做這個練習我遇到的最大瓶頸是,一行程式碼都沒改動,但build出來的app不一樣。本文最開始的那張圖就是唯一成功的一次,之後再build都是長這樣:
也許是我的api處理有我沒發現的問題。接下來也會繼續紀錄。
另外,在viewController中的tableView cell的func cellForRowAt 直接呼叫cell的屬性,直接指定Label上的字從沒成功過。
但在cell那個class內就能成功。