精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品一区亚洲| 在这里有精品| 国产精品国产三级国产三级人妇| 7m第一福利500精品视频| 国产一卡二卡三卡四卡| 男人皇宫亚洲男人2020| 国产精品久久久久毛片软件| 91在线看www| 精品国产免费观看| 欧美电影一二区| 欧美精品一区二| 国产高潮免费视频| 黄色污污视频在线观看| 久久久精品免费免费| 亚洲va男人天堂| 51国产偷自视频区视频| 97国产精品| 精品一区二区三区四区| 成年网站免费在线观看| 蜜桃视频动漫在线播放| 国产精品久久久久久久久免费相片| 国产主播精品在线| 综合网在线观看| 午夜欧美精品久久久久久久| 亚洲欧美日韩直播| 国产伦理在线观看| 欧美在线一级| 色婷婷av久久久久久久| 国产 欧美 日韩 一区| 最新av网站在线观看 | 黄色a级片免费| 伊人222成人综合网| 中文字幕乱码日本亚洲一区二区| 成人动漫视频在线观看免费| 在线观看国产成人| 蘑菇福利视频一区播放| 久久久噜噜噜久久久| 亚洲波多野结衣| 不卡av一区二区| 精品亚洲va在线va天堂资源站| 911av视频| 97人人做人人爽香蕉精品| 五月综合激情婷婷六月色窝| 天天做天天躁天天躁| 激情影院在线观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日本黄网免费一区二区精品| 亚洲第一免费视频| 国产一区二区在线视频| 国产精品美女999| 亚洲自拍一区在线观看| 一区二区三区成人精品| 久久免费观看视频| 精品亚洲永久免费| 国语对白精品一区二区| 欧美日韩国产二区| 免费三片在线播放| 欧美性色综合| 欧美激情视频免费观看| 欧美精品videos极品| 欧美1区2区3区| 九九久久久久99精品| 欧美亚洲日本在线| 欧美日本不卡| 久久久女人电视剧免费播放下载| 国产福利视频网站| 一区二区三区四区电影| 欧美成人第一页| 久久久久久久极品内射| 亚洲精选成人| 热久久这里只有精品| 潘金莲一级淫片aaaaaa播放| 天堂蜜桃一区二区三区| 国产精品日日摸夜夜添夜夜av| 九九热在线免费观看| 欧美亚洲免费| 国产精品亚洲自拍| 国产丝袜视频在线观看| 国产成人av一区二区三区在线| 91精品视频播放| 亚洲卡一卡二卡三| 91网址在线看| 亚洲欧美精品在线观看| 新版中文在线官网| 欧美午夜精品久久久久久浪潮| 97国产在线播放| 国产精成人品2018| 精品久久久久久久久久久久久久久久久 | 公侵犯人妻一区二区三区| 久操国产精品| 日韩小视频网址| 久久综合成人网| 久久性色av| 91久久精品视频| 无码国精品一区二区免费蜜桃| 波多野结衣中文字幕一区二区三区 | caoporn-草棚在线视频最| 午夜精品一区在线观看| 黄色三级视频片| 视频一区日韩| 亚洲一级免费视频| 欧美成人精品激情在线视频| 在线综合视频| 成人福利免费观看| 亚洲日本在线播放| 中文字幕一区二区三区四区不卡| 一本大道东京热无码aⅴ| 在线毛片观看| 欧美大片免费久久精品三p| 亚洲AV无码片久久精品| 888久久久| 国产成人jvid在线播放| www久久久com| 中文字幕在线不卡一区| 看av免费毛片手机播放| 日本久久久久| 亚洲欧美一区二区三区四区| 久久久久亚洲av无码专区| 青娱乐精品视频| 久久国产精品一区二区三区| a级毛片免费观看在线| 91国偷自产一区二区使用方法| 中文字幕在线视频一区二区| 国产一区国产二区国产三区| 欧美精品久久一区二区| 91在线观看喷潮| 亚洲国产成人自拍| 亚洲爆乳无码专区| 九九热播视频在线精品6| 爱福利视频一区| 免费黄色一级大片| 91天堂素人约啪| 农民人伦一区二区三区| 久久免费福利| 久久香蕉国产线看观看av| 亚洲中文无码av在线| 久久综合狠狠综合| 日本欧美黄色片| 久久99国产精品久久99大师| 欧美另类高清videos| 国产精品国产一区二区三区四区 | 欧美精品高清视频| 亚洲一二三精品| 三级久久三级久久久| 欧美精品一区在线| 波多野结衣亚洲| 亚洲另类激情图| 国产婷婷色一区二区在线观看| 粉嫩av亚洲一区二区图片| 日日噜噜夜夜狠狠久久丁香五月| 国产精品99久久久久久董美香| 日韩激情在线视频| 天天操天天操天天操天天| 91小视频在线| 99999精品视频| 亚洲调教一区| 国产成人av网址| 岛国视频免费在线观看| 在线免费精品视频| 少妇无套高潮一二三区| 免费欧美日韩国产三级电影| 亚洲精品一区二区三区蜜桃久 | 欧美日韩三区| 国产精品视频入口| 九色porny视频在线观看| 亚洲精品日韩久久久| www毛片com| 国产精品久久久久国产精品日日| www.这里只有精品| 国产精品久久占久久| 97se视频在线观看| www在线观看黄色| 亚洲欧美激情精品一区二区| 中文字幕激情视频| 亚洲日本成人在线观看| 人妻精油按摩bd高清中文字幕| 亚洲午夜精品一区 二区 三区| 亚洲最大成人在线| av小说在线播放| 精品中文字幕久久久久久| 波多野结衣毛片| 综合久久给合久久狠狠狠97色| www.五月天色| 日韩视频精品在线观看| 日本在线播放一区| 国产日本亚洲| 91chinesevideo永久地址| 岛国最新视频免费在线观看| 欧美一区二区三区免费大片| 国产污污视频在线观看| 中文字幕精品三区| 免费观看一区二区三区| 久久一区激情| 免费日韩在线观看| 久久综合欧美| av一区二区三区在线观看| 国产日韩电影| 欧美成年人网站| 欧美精品a∨在线观看不卡 | 欧美日韩激情| yy111111少妇影院日韩夜片| 日本免费一区二区三区四区| 久久这里只有精品99| 日本在线视频1区| 91精品午夜视频| 99久久久无码国产精品免费蜜柚| 亚洲欧洲精品成人久久奇米网| 中文字幕第3页| 激情国产一区二区| 日韩 欧美 高清| 午夜日韩福利| 亚洲免费视频一区| 免费成人网www| 国产精品久久九九| 99久热在线精品视频观看| 国产91色在线|免| wwwww亚洲| 美女扒开尿口让男人操亚洲视频网站| 精品久久久无码中文字幕| 日本精品一级二级| 日韩字幕在线观看| 亚洲精品免费电影| 欧美性猛交xxxx乱大交少妇| 99re视频精品| 麻豆免费在线观看视频| 九九久久精品视频| 手机看片福利日韩| 国产免费成人| 奇米影视亚洲色图| 欧美午夜一区二区福利视频| 经典三级在线视频| 99久久夜色精品国产亚洲狼| 日韩欧美精品一区二区三区经典| 精品亚洲自拍| 国产乱码精品一区二区三区日韩精品 | 男女啪啪999亚洲精品| 2019日本中文字幕| heyzo高清在线| 欧美激情xxxxx| 欧美人与牲禽动交com| 日韩中文字幕不卡视频| 成人av电影观看| 亚洲天堂av网| 成人影视在线播放| 一区国产精品视频| 超碰免费在线| 在线观看日韩www视频免费| 国内精品一区视频| 一区二区三区天堂av| 黄色av网址在线免费观看| 亚洲精品之草原avav久久| 欧美日韩伦理片| 亚洲精品少妇网址| 男男电影完整版在线观看| 亚洲精品视频网上网址在线观看| 国产小视频免费观看| 亚洲成人av在线播放| 少妇高潮一区二区三区69| 亚洲国产精品推荐| 色就是色亚洲色图| 亚洲丝袜av一区| 日本免费中文字幕在线| 精品国产一区久久久| av大大超碰在线| 欧美激情综合色综合啪啪五月| 欧美黄色视屏| 欧美亚洲国产日韩2020| 激情亚洲影院在线观看| 国产在线拍偷自揄拍精品| 日本一区影院| 国内一区二区在线视频观看 | 欧美一区二区免费视频| 亚洲成人第一区| 国产视频在线一区二区| 国产色在线 com| 久久成人人人人精品欧| www555久久| 国产精品爱啪在线线免费观看| 第84页国产精品| 国产一区二区丝袜| 国产精品17p| 偷拍视频一区二区| 欧美精品观看| 国产精品69页| 国产高清精品在线| 欧美bbbbb性bbbbb视频| 中文字幕一区二区三区在线播放 | 特级特黄刘亦菲aaa级| 91老师片黄在线观看| 国产精品久久国产精麻豆96堂| 亚洲欧洲无码一区二区三区| 黄网站免费在线| 欧美午夜精品免费| 免费观看a视频| 伊人伊成久久人综合网站| 青草影视电视剧免费播放在线观看| 国内成人精品视频| 日韩免费在线电影| 精品91免费| 一区二区国产在线| 日本va中文字幕| 成人a免费在线看| 国产精品18在线| 日韩欧美在线国产| 性欧美videos另类hd| 在线成人激情视频| 狠狠操一区二区三区| 91中文在线视频| 日韩精品电影| 丰满爆乳一区二区三区| 激情综合网最新| 韩国三级hd中文字幕| 亚洲国产精品久久人人爱蜜臀| 国产亚洲久一区二区| 亚洲国产精品国自产拍av秋霞| 91网页在线观看| 2018日韩中文字幕| 国产精品18hdxxxⅹ在线| 日本特级黄色大片| 日韩精品一二区| 国产制服丝袜在线| 亚洲丰满少妇videoshd| 99热这里只有精品在线观看| 国产一区二区三区在线| 男人久久天堂| 国产欧美亚洲日本| 国精品一区二区| 性生活在线视频| 中文字幕亚洲电影| 自拍偷拍精品视频| 国产亚洲精品美女| 久久sese| 你懂的视频在线一区二区| 亚洲电影在线| 成年女人免费视频| 亚洲综合自拍偷拍| 精品女同一区二区三区| 成人444kkkk在线观看| 亚洲精品777| 正在播放一区二区三区| 日本免费新一区视频| 69精品无码成人久久久久久| 一本色道a无线码一区v| 色播色播色播色播色播在线| 97人人爽人人喊人人模波多 | 在线看的片片片免费| 精品视频1区2区| 日本在线看片免费人成视1000| 国产91精品最新在线播放| 国产精品欧美在线观看| 欧美伦理视频在线观看| 亚洲国产岛国毛片在线| 亚洲综合一区中| 久久天天躁夜夜躁狠狠躁2022| 九九热这里有精品| 亚洲最新免费视频| 韩国欧美国产1区| 在线免费观看亚洲视频| 精品国产91九色蝌蚪| 小h片在线观看| 色999日韩自偷自拍美女| 麻豆精品蜜桃视频网站| 亚洲天堂网av在线| 日韩一区二区三免费高清| 少妇av在线| 九九99玖玖| 日韩中文字幕亚洲一区二区va在线| 乐播av一区二区三区| 欧美日韩亚洲高清一区二区| 超碰人人在线| 精品国产乱码久久久久软件| 久久先锋影音| 天天天天天天天天操| 亚洲第一av网| 日韩一区二区三区在线免费观看| 天堂av一区二区| 国产一区二区三区蝌蚪| 日本少妇吞精囗交| 曰本色欧美视频在线| 深夜激情久久| 成人精品视频一区二区| 18涩涩午夜精品.www| 国产 欧美 自拍| 国产精品国语对白| 欧美二区视频| 国产 欧美 在线| 日韩片之四级片| 欧美成人黑人| 日本在线视频www色| 26uuu国产电影一区二区| 亚洲字幕av一区二区三区四区| 欧美成人一二三| 免费看日本一区二区| 香蕉视频色在线观看| 色综合久久精品| 高清电影在线免费观看| 亚洲精品人成| 久久奇米777| 亚洲精品国偷拍自产在线观看蜜桃| 2021国产精品视频|