iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
Mobile Development

自己的 app 自己寫系列 第 16

[Day16] 過了一半才是開始

  • 分享至 

  • xImage
  •  

希望一切平安但我還是想放假QQ
颱風前夕青菜到處都找不到QQ

今天繼續研究昨天翻到的專案,關於 DeviceActivityReport 的 entrypoint 其實藏在 MonitorReport 裡面,這個 struct 的性質是 DeviceActivityReportExtension。

DeviceActivityReportExtension 的 body 必須要是 DeviceActivityReportScene,而 DeviceActivityReportScene 的類型則是 AppExtensionScene。DeviceActivityReportExtension 內,context 是上下文設定, configuration 記載了配置資料, makeConfiguration 接收了 DeviceActivityData 並進行數據轉換,content 則根據配置進行渲染。

public protocol DeviceActivityReportScene : AppExtensionScene {

    var context: DeviceActivityReport.Context { get }

    associatedtype Configuration

    func makeConfiguration(representing data: DeviceActivityResults<DeviceActivityData>) async -> Self.Configuration

    @ViewBuilder var content: (Self.Configuration) -> Self.Content { get }
}

在 MonitorReport 中應該有一部份是需要額外實作的,要拿到 report data 然後丟進 view 裡面,否則就會 default (直接載下來這樣)除了標題一片空白。

底下的 TotalActivityReportScene 是 DeviceActivityReportScene 的實現,當中設定了 context 以及 content,而 makeConfiguration 則是處理了 DeviceActivityResults 並進行轉換。

在 TotalActivityReport 當中有用到了 closure 的寫法,閉包和匿名函式有點類似,但可以獲取外部變量的值並使用,也可以直接被當成參數傳遞。swift 中還有提供一些簡寫,像是省略類型,直接用 $0、$1 來傳遞參數並進行計算等。


上一篇
[Day15] 早睡早起怎麼這麼難
下一篇
[Day17] 如果颱風假要 WFH 那平常可以也 WFH 嗎
系列文
自己的 app 自己寫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言