iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

參考文件

問題說明

  • BaoAnGongFisher dev branch 重構後,所製作的集郵冊畫面 StampAlbumView 中的郵票 (Stamp) ,是放在 StampAlbumView 的屬性中,寫成 @State private var stamps:[Stamp] = []Github 連結
  • 目前看到的兩個問題有
    1. 「@State private var stamps」無法如預期初始化:在開發完載入本地相片功能後,預期在 init() 函示去呼叫掃描本地相簿,動態載入畫面的行為。然而在不斷地印出訊息後,確定不是 FileManager 問題,也不是字串編碼問題,路徑也都正確,檔案也有找到也存在。但是就是無法在 init() 內去修改 properties。
    2. 「無法動態更改 Array 數值,只能從 Array 後面加入」:假設相簿中已經有 A, B, C 三種魚,此時要再增加與 A 同名的魚,則 stamps array 會變成 A, B, C, A;然而我們期待看到的是 A*2, B, C

解決方法

State properties

動態調整 stamp array

  • 有兩種常見的作法
    • 其一是實作 Stamp 的 operator function,使不同個 stamp instance 可以直接透過 operator 查找屬性(看魚是否存在陣列了,那需要實作 isExist 的邏輯)及調改屬性(將 stamp 的 counted 計數上下調整)。
    • 其二,我想到的是在我們還沒實作 Stamp 的 operator 前,可以直接重新做出 Stamp array 呈現出來就行。

同時解決這兩個問題

init () {
    let localPicsInfo = scanLocalStamp()
    let localStamp = generateStamps(info:localPicsInfo)
    _stamps = State(initialValue: localStamp)
}
  • 寫一個 scanLocalStamp 用來爬找目前位於手機端的圖片目錄 /saved/pics/ 底下所有的魚和魚照片。並期待拿到 Dictionary 的資料格式,描述魚名字和魚圖片等訊息。
  • 在寫一個 generateStamps 用來將 魚名字和圖片位置等字典格式 轉換成 郵票格式
  • 使用 _property = State(initialValue: xxx) 的作法,在 init 階段賦值給某個屬性。

上一篇
【Day 26】 Storage 基礎設施 S3 裡的安全措施
下一篇
【Day 28】建立關聯使用者與集郵冊的關聯
系列文
依然無法成為釣魚大師也要努力摸魚!!辣個吃魚神器 APP 第二彈33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言