精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在 Swift 圖表中使用 Foudation 庫中的測量類型

開發 前端
我們將使用今年推出的新的Swift Charts 框架,并將看到如何繪制默認不符合 Plottable 協議的類型的數據,如 Measurement<UnitDuration>。

前言

在這篇文章中,我們將建立一個條形圖,比較基督城地區自然散步的持續時間。我們將使用今年推出的新的Swift Charts 框架,并將看到如何繪制默認不符合 Plottable 協議的類型的數據,如 Measurement<UnitDuration>。

定義圖表的數據

讓我們先定義一下要在圖表中展現的數據。

我們聲明了一個包含標題和步行時間(小時)的 ??Walk??? 結構體。我們使用 ??Foundation?? 框架中的測量類型Measurement[1]和單位類型UnitDuration[2]來表示每次步行的時間。

struct Walk {
let title: String
let duration: Measurement<UnitDuration>
}

我們在數組 works 中存儲要在圖表中顯示的數據。

let walks = [
Walk(
title: "Taylors Mistake to Sumner Beach Coastal Walk",
duration: Measurement(value: 3.1, unit: .hours)
),
Walk(
title: "Bottle Lake Forest",
duration: Measurement(value: 2, unit: .hours)
),
Walk(
title: "Old Halswell Quarry Loop",
duration: Measurement(value: 0.5, unit: .hours)
),
...
]

在圖表中使用測量值

嘗試直接在圖表中使用測量值。

讓我們定義一個 Chart,并將 walks 數組作為數據參數傳遞給它。因為我們知道我們的walk 標題是唯一的,所以我們可以直接使用它們作為 id,但你也可以將你的數據模型改為 Identifiable。

Chart(walks, id: \.title) { walk in
BarMark(
x: .value("Duration", walk.duration),
y: .value("Walk", walk.title)
)
}

注意,因為 Measurement<UnitDuration>? 沒有遵守 Plottable 協議,我們會得到一個錯誤:「Initializer 'init(x:y:width:height:stacking:)' requires that 'Measurement' conform to 'Plottable'」

BarkMark? 的初始化器期望收到一個用于 x 和 y 的 PlottableValue? 參數。而且 PlottableValue? 的值類型必須符合 Plottable 協議。

我們有幾個選擇來解決這個錯誤。我們可以提取測量值的 value?,它是一個 Double? 類型,它是默認符合 Plottable? 的,我們可以擴展具有 Plottable? 一致性的 Measurement<UnitDuration>?,或者我們可以定義一個包裝了測量的類型并使其符合 Plottable 協議。

如果我們簡單地從測量值中提取,我們就會失去上下文,不知道用什么單位來創建測量值。這意味著,我們將無法正確格式化圖表的標簽來向用戶表示單位。雖然我們可以記住我們在創建測量時使用了小時 hours,但這并不理想。例如,我們可以決定以后改變數據模型,以分鐘為單位存儲持續時間,或者數據可能來自其他地方,所以手動重構單位并不是一個完美的解決方案。

用 Plottable? 的一致性來擴展 Measurement<UnitDuration> 是可行的,但根據 Swift 中關于外部類型的追溯一致性的警告 (Warning for Retroactive Conformances of External Types[3]),如果 Swift Charts 在未來添加了這種一致性,它可能會被破壞。

我們將研究如何定義我們自己的類型來包裝 measurement?,并為我們的自定義類型添加 Plottable 的一致性。

設計一個包裝器類型

設計一個符合 Plottable 標準的包裝器類型。

我們將定義一個自定義的 PlottableMeasurement 類型,并使其成為通用的,所以它可以容納任何類型的單位的測量類型。

struct PlottableMeasurement<UnitType: Unit> {
var measurement: Measurement<UnitType>
}

然后,我們將為 PlottableMeasurement 添加 Plottable 的一致性,其單位為 UnitDuration 類型。我們可以在將來添加對其他單位的支持。

extension PlottableMeasurement: Plottable where UnitType == UnitDuration {
var primitivePlottable: Double {
self.measurement.converted(to: .minutes).value
}

init?(primitivePlottable: Double) {
self.init(
measurement: Measurement(
value: primitivePlottable,
unit: .minutes
)
)
}
}

Plottable 協議有兩個要求:primitivePlottable 屬性必須返回原始類型之一,如 Double、String 或 Date,以及一個可失敗的初始化器,從原始 plottable 類型創建一個值。

我決定將測量值轉換為分鐘,但你可以選擇適合你需要的任何其他單位。只是在與原始值轉換時要使用相同的單位,這一點很重要。

我們現在可以更新我們的圖表,以使用我們的自定義 Plottable 類型。

Chart(walks, id: \.title) { walk in
BarMark(
x: .value(
"Duration",
PlottableMeasurement(measurement: walk.duration)
),
y: .value("Walk", walk.title)
)
}

它可以工作,但X軸上的標簽沒有格式化,沒有向用戶顯示測量單位。我們接下來要解決這個問題。

圖片

顯示格式化標簽

顯示帶有測量單位的格式化標簽。

為了定制X軸上的標簽,我們將使用chartXAxis(content:)修改器,并用傳遞給我們的值重構x軸的標記。

Chart(walks, id: \.title) { ... }
.chartXAxis {
AxisMarks { value in
AxisGridLine()
AxisValueLabel("""
\(value.as(PlottableMeasurement.self)!
.measurement
.converted(to: .hours),
format: .measurement(
width: .narrow,
numberFormatStyle: .number.precision(
.fractionLength(0))
)
)
""")
}
}

我們首先添加網格線,然后重構給定值的標簽。

AxisValueLabel在初始化器中接受一個LocalizedStringKey,它可以通過插值測量和指定其格式風格來構建。

我們收到的值是使用我們在 Plottable 一致性中定義的初始化器創建的,所以在我們的案例中,測量值是以分鐘為單位提供的。但我相信對于這個特定的圖表,使用小時會更好。我們可以很容易地將測量值轉換為插值內部所需的單位。在這里,我們確定該值是 PlottableMeasurement 類型的,所以我們可以強制解包類型轉換。

我選擇了縮小的格式和小數點后零位數作為數字樣式,但你可以根據你的具體圖表調整這些設置。

最后的結果是在X軸上顯示以小時為單位的格式化持續時間。

圖片

你可以從我們的 GitHub repo 中獲得這篇文章中使用的項目的完整 示例代碼[4]

參考資料

[1]Measurement: https://developer.apple.com/documentation/foundation/measurement?。

[2]UnitDuration: https://developer.apple.com/documentation/foundation/unitduration?。

[3]Warning for Retroactive Conformances of External Types: https://github.com/apple/swift-evolution/blob/main/proposals/0364-retroactive-conformance-warning.md?。

[4]示例代碼: https://github.com/SwiftCommunityRes/SwiftUI-Code-Examples/blob/main/Using-Measurements-from-Foundation-as-values-in-Swift-Charts/Using-Measurements-from-Foundation-as-values-in-Swift-Charts.swift?。

責任編輯:姜華 來源: Swift社區
相關推薦

2014-08-01 15:16:05

SwiftC語言

2015-04-17 16:44:22

swiftOC

2015-02-11 18:02:59

iOS源碼Swift圖表庫

2009-07-02 10:07:24

C# 4.0的動態類型Visual Stud

2011-06-28 10:03:37

Qt OpenCV qmake

2010-04-21 17:50:59

共享庫bada

2023-07-04 15:11:30

TypeScript類型保護

2009-12-23 09:05:03

2015-08-27 09:46:09

swiftAFNetworkin

2014-07-02 09:47:06

SwiftCocoaPods

2022-05-11 09:01:54

Swift類型系統幻象類型

2023-04-26 11:59:06

Swift異步編程

2015-03-16 10:33:14

Swift指針

2015-01-21 16:25:29

Swift指針

2022-06-13 09:02:06

Swift類型占位符

2011-03-11 09:20:35

jQueryjavascript

2022-05-25 09:15:01

Swift 5.6占位符

2011-09-06 16:30:32

iOS系統靜態鏈接庫

2021-04-22 06:15:59

Linux靜態鏈接動態庫

2025-04-02 07:37:29

點贊
收藏

51CTO技術棧公眾號

欧美成人基地| 国产三级电影在线播放| 日本一区二区三区视频| 亚洲国产成人在线| 99国产高清| 69视频免费在线观看| 青青草国产成人a∨下载安卓| 欧美乱妇15p| 阿v天堂2017| 韩国中文字幕在线| www欧美成人18+| 91九色单男在线观看| 国产又爽又黄的视频| 国产精品国产一区| 日韩成人在线观看| 美女被艹视频网站| 在线国产成人影院| 亚洲va欧美va天堂v国产综合| 亚洲国产精品综合| 飘雪影院手机免费高清版在线观看| 麻豆成人av在线| 日本午夜人人精品| 精品一级少妇久久久久久久| 日韩精品免费一区二区在线观看 | 国产黄色激情视频| 成人三级黄色免费网站| av毛片久久久久**hd| 成人午夜在线视频一区| 国产一级片免费在线观看| 亚洲激情综合| 欧美美女15p| 天天爽天天爽天天爽| 国产免费播放一区二区| 日韩精品欧美国产精品忘忧草| 欧美熟妇另类久久久久久多毛| 黄色成人在线视频| 一本到三区不卡视频| 男女猛烈激情xx00免费视频| 成人免费视屏| 国产精品美女久久久久高潮| 日韩欧美亚洲日产国| 日韩精品系列| 91色婷婷久久久久合中文| 国产精品制服诱惑| 成人久久精品人妻一区二区三区| 国产在线国偷精品免费看| 国产精品免费视频久久久| 国产精品免费无遮挡无码永久视频| 99精品热6080yy久久| 国内精品400部情侣激情| 黄页网站免费观看| 狠狠综合久久| 久久久久久久影院| 玖玖爱这里只有精品| 在线国产一区二区| 欧美日韩成人在线观看| 青青草偷拍视频| 欧美+日本+国产+在线a∨观看| 欧美成人合集magnet| 中文字幕电影av| 欧美激情偷拍| 性欧美在线看片a免费观看| 国产午夜精品无码| 国产精品色网| 国产精品福利在线观看| 亚洲婷婷久久综合| 激情综合色播五月| 91视频8mav| 丰满人妻av一区二区三区| 国产成人av资源| 久久精品女人的天堂av| 国产中文字幕在线看| 中文字幕精品在线不卡| 亚洲最新免费视频| 日皮视频在线观看| 第一福利永久视频精品| 97公开免费视频| 亚洲免费看片| 欧美精品一区二区在线播放| 国产亚洲色婷婷久久99精品91| 亚洲福利天堂| 久久精品电影一区二区| 久久香蕉精品视频| 老牛嫩草一区二区三区日本| 国产精品人成电影在线观看| 一级做a爱片久久毛片| 国产黄色91视频| 欧美区高清在线| 九七久久人人| 欧美日韩一区二区免费视频| av在线无限看| 亚洲不卡在线| 亚洲欧美一区二区激情| 麻豆精品一区二区三区视频| 免费视频一区| 3d精品h动漫啪啪一区二区| 日韩欧美在线番号| 亚洲男帅同性gay1069| 欧美精品一区免费| 亚洲精品乱码日韩| 亚洲国产精品字幕| 国产成人自拍网站| 视频一区免费在线观看| 草莓视频一区| 午夜激情视频在线观看| 天天综合天天综合色| 9l视频白拍9色9l视频| 国产精品成人自拍| 久久久精品2019中文字幕神马| 国产区在线观看视频| 国产乱码精品一区二区三区五月婷| 久99久在线| 亚洲色图美国十次| 欧美丝袜丝交足nylons图片| 欧亚乱熟女一区二区在线| 99久久国产综合精品成人影院| 性欧美xxxx交| www.四虎在线观看| 国产精品剧情在线亚洲| 丝袜老师办公室里做好紧好爽| 激情综合五月| 色偷偷噜噜噜亚洲男人| 人人爽人人爽人人片av| 99久久久久免费精品国产| 米仓穗香在线观看| www.久久久.com| 中文国产亚洲喷潮| 欧美亚洲另类小说| 91亚洲精品久久久蜜桃网站| 日本福利视频网站| 年轻的保姆91精品| 色悠悠久久久久| 免费在线不卡av| 久久精品欧美日韩精品 | 三级在线观看一区二区| 国产三区二区一区久久| 亚洲夜夜综合| 日韩一级视频免费观看在线| 免费国产羞羞网站美图| 狠狠色丁香婷综合久久| 亚洲欧美国产一区二区| 成人a在线观看高清电影| 国产亚洲欧洲高清| 亚洲成人av网址| 久久精品亚洲精品国产欧美| 成人免费在线小视频| 老汉色老汉首页av亚洲| 91成人免费观看网站| 日韩在线观看视频一区二区三区| 亚洲网友自拍偷拍| 7788色淫网站小说| 亚洲综合激情| 日韩av图片| 国产69精品久久久久按摩| 中文在线不卡视频| 亚洲视频在线免费播放| 亚洲视频免费看| 奇米影视四色在线| 888久久久| 国产乱码精品一区二区三区中文 | 欧美熟妇一区二区| 日韩精品乱码av一区二区| 清纯唯美一区二区三区| 成人在线观看免费视频| 久久国产精品久久久久久| 亚洲成人第一区| 婷婷夜色潮精品综合在线| 少妇户外露出[11p]| 日韩激情一区二区| 中文网丁香综合网| 精品三级久久久| 久久久久亚洲精品国产| 日本啊v在线| 欧美日韩和欧美的一区二区| 男人的天堂久久久| 久久综合久久99| 亚洲18在线看污www麻豆| 欧美午夜免费影院| 欧美精品与人动性物交免费看| 日韩中文视频| 欧美日本中文字幕| 免费在线一级视频| 欧美一级片在线| 日本特级黄色片| 中文字幕亚洲一区二区va在线| 少妇献身老头系列| 日韩激情视频在线观看| 日韩一级免费看| 久久综合影院| 99精品国产高清在线观看| 桃色av一区二区| 久久精品国产99国产精品澳门| 亚洲卡一卡二卡三| 欧美色倩网站大全免费| 在线免费观看毛片| 国产精品二三区| xxxxxx黄色| 久久精品久久99精品久久| 男人插女人视频在线观看| 久久电影院7| 免费试看一区| 911亚洲精品| 国产美女主播一区| 在线日韩影院| 欧美激情精品久久久久久大尺度| 黄色片免费在线| 亚洲精品一区二区三区精华液| 中文 欧美 日韩| 精品色蜜蜜精品视频在线观看| 中文字幕求饶的少妇| 久久精品综合网| 免费日本黄色网址| 国产剧情一区二区三区| 精品www久久久久奶水| 欧美三级黄美女| 在线观看日韩羞羞视频| 久久91精品| 国产在线精品一区二区中文 | 日韩欧美中文字幕视频| 国产婷婷色一区二区三区在线| 中文在线观看免费视频| 国产精品一区在线观看乱码 | 成人av在线一区二区三区| 制服丝袜中文字幕第一页| 日本一不卡视频| 青青草原av在线播放| 亚洲黄色av| 日韩一级免费看| 午夜欧美精品| 97久久国产亚洲精品超碰热 | 黄在线观看网站| 亚洲黄色在线| 亚洲精品久久久久久久蜜桃臀| 亚洲老妇激情| 咪咪色在线视频| 91蜜臀精品国产自偷在线| 视频在线观看成人| 成人羞羞在线观看网站| 亚洲国产精品视频一区| 欧洲杯半决赛直播| 亚洲欧洲一区二区| 999国产精品永久免费视频app| 日韩av电影免费播放| 精品视频网站| 亚洲黄色成人久久久| 久久综合88| 最新精品视频| 欧美日韩岛国| 成年人看的毛片| 国产日韩一区| 亚洲精品中文字幕无码蜜桃| 免费永久网站黄欧美| 国产第一页视频| 日韩电影免费在线| 爱爱爱爱免费视频| 国产乱子伦视频一区二区三区| 中文字幕1区2区| 99久久久久久99| 国产肥白大熟妇bbbb视频| 欧美经典三级视频一区二区三区| 国产又粗又猛又爽又黄的视频四季| 国产精品水嫩水嫩| 农村妇女精品一区二区| 亚洲一卡二卡三卡四卡五卡| 亚洲欧美在线观看视频| 色哟哟国产精品| 一区二区的视频| 精品国产自在久精品国产| 亚洲 小说区 图片区 都市| 亚洲欧美激情精品一区二区| 成人性生交大片免费看午夜| 久久精品久久久久久国产 免费| 中文字幕有码在线观看| 97在线免费观看视频| 日韩不卡视频在线观看| 91入口在线观看| 国产精品亚洲人成在99www| 一区二区免费电影| 国内视频精品| 可以在线看的黄色网址| 久久99久久99| 日韩aaaaa| 国产精品久久久久久久第一福利| 欧美人妻一区二区| 在线观看一区二区视频| 国产喷水吹潮视频www| 日韩h在线观看| 欧美18一19xxx性| 91精品国产91久久久久久不卡 | 欧美喷潮久久久xxxxx| 亚洲精品久久久久久无码色欲四季| 精品视频在线播放免| 国产一二区在线| 国产精品88a∨| 91精品入口| 亚洲韩国在线| 亚洲一区视频| 国产又粗又长又爽又黄的视频| 99久久99久久精品免费观看 | 天堂www中文在线资源| 国产欧美一区二区精品忘忧草 | 国新精品乱码一区二区三区18| 成人毛片在线| 精品少妇人妻av免费久久洗澡| 美国一区二区三区在线播放 | 午夜在线观看视频| 色综合久久88色综合天天看泰| 少妇饥渴放荡91麻豆| 国产精品美女久久福利网站| 婷婷五月色综合| 欧美激情性爽国产精品17p| 激情内射人妻1区2区3区| 高清在线不卡av| 国产三级aaa| 一本一本大道香蕉久在线精品 | www.精品视频| 亚洲精品国偷自产在线99热| 日本中文字幕视频在线| 日韩免费不卡av| 久久成人福利| 国产爆乳无码一区二区麻豆| 九九九久久久精品| 蜜桃久久精品成人无码av| 香蕉成人伊视频在线观看| 国产成人精品毛片| 色多多国产成人永久免费网站| 日韩影片中文字幕| 麻豆传媒一区二区| 亚洲少妇诱惑| 人妻激情偷乱频一区二区三区| 亚洲免费观看视频| 国产乱淫av免费| 日韩一区av在线| 精品176极品一区| 五月婷婷综合色| 日韩精品电影一区亚洲| 三上悠亚影音先锋| 欧美性69xxxx肥| 日韩电影在线观看完整版| 97在线视频免费看| 欧美性生活一级片| 777久久久精品一区二区三区| 成人午夜视频在线观看| 国产一级二级三级| 精品国产精品网麻豆系列| 女人天堂av在线播放| 99蜜桃在线观看免费视频网站| 亚洲乱码免费伦视频| 亚洲AV无码久久精品国产一区| 亚洲色图丝袜美腿| 国产av无码专区亚洲av麻豆| 欧美美女15p| 国产精品天天看天天狠| 青青草成人免费在线视频| 99麻豆久久久国产精品免费优播| 国产网友自拍视频| 日韩精品亚洲元码| 日韩一区二区三区免费| 亚洲欧洲精品在线| 久久99精品久久久久久久久久久久| 97精品在线播放| 日韩一区国产二区欧美三区| 日本动漫理论片在线观看网站| 国产精品视频免费一区| 国产一区二区三区久久久久久久久| 巨胸大乳www视频免费观看| 日本久久一区二区| 国产成人l区| 国产日韩欧美一区二区| 久久精品国语| 91高清免费观看| 亚洲国产精品久久久久| 粉嫩一区二区三区| 爱爱爱视频网站| caoporn国产一区二区| 欧美特级黄色片| 色在人av网站天堂精品| 蜜桃成人av| 亚洲一区二区三区三州| 精品福利在线观看| av资源在线观看免费高清| 亚洲伊人第一页| 亚洲综合另类| 亚洲综合视频网站| 国产丝袜一区二区三区免费视频| 国产韩日精品| 欧美视频免费看欧美视频| 国产色综合久久| 亚洲精品一区二区三区新线路| 人妖精品videosex性欧美| 亚州av乱码久久精品蜜桃| 亚洲精品乱码久久久久久不卡| 欧美剧情片在线观看| 九色porny自拍视频在线观看| 一区二区三区av在线| 99久久免费国产| a天堂在线视频| 国产精品爱啪在线线免费观看| 午夜日本精品| 亚洲精品自拍视频在线观看|