Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Swift Charts: Vectorized and function plots
Search
yamakentoc
June 28, 2024
Programming
2.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Swift Charts: Vectorized and function plots
yamakentoc
June 28, 2024
More Decks by yamakentoc
See All by yamakentoc
WWDC25:デザインセッションまとめ
yamakentoc
1
150
Swift × Android : How Skip is Shaping the Future of Cross-Platform Development
yamakentoc
0
590
Skip:Native Swift on Androidを理解する
yamakentoc
0
210
マルチプラットフォーム系はSkipで良さそうな話.pdf
yamakentoc
2
610
Pathのあまり知られてない部分を知る
yamakentoc
1
110
WWDC創設期から現在まで
yamakentoc
0
110
Xcodeの意外と知られてない機能
yamakentoc
1
190
既存アプリをVisionOSでビルドするコツ.pdf
yamakentoc
1
600
ARKitのすヽめ
yamakentoc
0
520
Other Decks in Programming
See All in Programming
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
320
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
440
Family mrubyの進捗
kishima
1
130
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
460
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
250
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
AIエージェント時代のコードレビューを設計する
nogu66
6
2.7k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
150
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
310
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
200
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.1k
Heart of Swift Concurrency
koher
0
900
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
1
470
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
430
Typedesign – Prime Four
hannesfritz
42
3.2k
4 Signs Your Business is Dying
shpigford
187
23k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Making the Leap to Tech Lead
cromwellryan
135
10k
Designing for Timeless Needs
cassininazir
1
480
Transcript
ࢁޱݡొʢZBNBLFOʣ 4XJGU$IBSUT 7FDUPSJ[FEBOEGVODUJPOQMPUT
ࣗݾհ ໊લɿࢁޱݡొʢZBNBLFOʣ ॴଐɿ ͍ͬͯΔ͜ͱɿ 5XJUUFSɿ!ZBNBLFOUPD
͢༰ w 4XJGU$IBSUTͷΞοϓσʔτʹ͍ͭͯ w Ξοϓσʔτ༰͚ͩฉ͍ͯΑ͘Θ͔Βͳ͍ͱࢥ͏ͷͰɺ ͦͷલʹ4XJGU$IBSUTͷ͓͞Β͍ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
4XJGU$IBSUTͷ͓͞Β͍ w 88%$Ͱൃද͞ΕͨάϥϑඳըͷGSBNFXPSL w l.BSLzΛ֤ͬͯάϥϑΛඳըͰ͖Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFTDIBSUT IUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
4XJGU$IBSUTͷ͓͞Β͍ w άϥϑΛඳը͍ͨ͠߹#BS.BSLΛ༻ w ͍ίʔυ͚ͩͰ؆୯ʹάϥϑΛඳըͰ͖Δ import SwiftUI import Charts struct
BarChartView: View { let dataList = [ (month: "Jan", value: 20), (month: "Feb", value: 60), (month: "Mar", value: 45) ] var body: some View { Chart(dataList, id: \.month) { BarMark( x: .value("Month", $0.month), y: .value("Value", $0.value) ) } } }
w ԁάϥϑ͕ඳըͰ͖ΔΑ͏ʹͳͬͨΓ 88%$Ͱʜ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
w ΑΓ؆୯ʹΠϯλϥΫςΟϒͳػೳ͕ՃͰ͖ΔΑ͏ʹͳͬͨΓ 88%$Ͱʜ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
w εΫϩʔϧՄೳʹͳͬͨΓ͠·ͨ͠ 88%$Ͱʜ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
88%$Ͱʜ w ͦͷଞʹ༷ʑͳΞοϓσʔτ͕ೖΓ·͕ͨ͠ɺ ৄࡉʮ4XJGU$IBSUT·ͱΊʯͱ͍͏ͷهࣄΛಡΜͰΈ͍ͯͩ͘͞ɻ Ҿ༻ݩɿIUUQTRJJUBDPNZBNBLFOUPDJUFNTBECDBG ͍͍Ͷ͍ͩ͘͞
88%$Ͱͷ4XJGU$IBSUTͷΞοϓσʔτ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
88%$Ͱͷ4XJGU$IBSUTͷΞοϓσʔτ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
88%$Ͱͷ4XJGU$IBSUTͷΞοϓσʔτ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w ࠓ·Ͱz.BSLzΛͬͯάϥϑΛඳը͍ͯͨ͠ʢ-JOF.BSL "SFB.BSL ʜʣ w ৽͘͠z1MPUzͱ͍͏ͷ͕ੜʢ-JOF1MPU "SFB1MPU ʜʣ w
1MPUΛ͏͜ͱͰؔΛͬͯάϥϑΛඳըՄೳʹ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
w ͭͷؔΛάϥϑʹඳըͰ͖Δ -JOF1MPU Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
w ྫ͑ʮ ʯΛඳը͍ͨ͠߹ y = x2 -JOF1MPU Chart { LinePlot(x:
"x", y: "y") { x in x * x // y=x^2 } } .chartXScale(domain: -5...5) // X࣠ͷൣғ .chartYScale(domain: -5...5) // Y࣠ͷൣғ ˞Πϝʔδ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB
w ؔͷྖҬΛຒΊΔ͜ͱ͕Ͱ͖Δ "SFB1MPU Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
"SFB1MPU w ͭͷؔͷؒͷྖҬΛຒΊΔ͜ͱͰ͖Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
"SFB1MPU w ͱ ͷྖҬΛຒΊΔ߹ y = x + 1 y
= x2 Chart { AreaPlot(x: "x", yStart: "x + 1", yEnd: "x^2") { x in (yStart: x + 1, yEnd: x * x) } } .chartXScale(domain: -5...5) // X࣠ͷൣғ .chartYScale(domain: -5...5) // Y࣠ͷൣғ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB ˞Πϝʔδ
άϥϑͷදࣔൣғΛઃఆ͢Δ w දࣔൣғΛઃఆ͢Δ߹DIBSU94DBMF EPNBJO Λ༻ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
άϥϑͷग़ྗൣғΛઃఆ͢Δ w ҾEPNBJOͰYͷൣғΛࢦఆ͢Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
,FZOPUFͰɺखॻ͖ͷܭࢉ͔ࣜΒάϥϑΛඳը͢Δγʔϯ͕͋ͬͨ $IBSUTͰؔΛάϥϑԽ͢ΔػೳΛ͍ͬͯΔ͜ͱ͕Θ͔Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
ύϥϝτϦοΫؔѻ͏͜ͱ͕Ͱ͖Δ w ύϥϝτϦοΫؔʢ1BSBNFUSJDGVODUJPOʣͱʜ w ಛఆͷύϥϝʔλʢྫ͑࣌ؒʣΛͬͯɺෳͷมʢҐஔͳͲʣΛಉ ࣌ʹදؔ͢ w ྫ͑ʮܘSͷԁʯҎԼͷΑ͏ʹදͤΔ x(t) =
r cos(t) y(t) = r sin(t)
ܘͷԁΛඳը͢Δ߹ w ܘͷԁΛදؔ͢ x(t) = 2 cos(t) y(t) = 2
sin(t) Chart { LinePlot(x: "x", y: "y", t: "t", domain: -.pi ... .pi) { t in let x = 2 * cos(t) let y = 2 * sin(t) return (x, y) } } .chartXScale(domain: -5...5) .chartYScale(domain: -5...5) ˞Πϝʔδ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB
ϋʔτΛඳը͢Δ߹ x(t) = 2 sin3(t) y(t) = cos(t)(2 − cos(t)
− cos2(t)) Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
۠ؔѻ͏͜ͱ͕Ͱ͖Δ w ۠ؔʢ1JFDFXJTFGVODUJPOʣͱʜ w ۠͝ͱʹҟͳΔؔΛద༻͢Δؔ f(x) = { x2 JG
x > 0 −x2 JG x ≤ 0 Chart { LinePlot(x: "x", y: "y") { x in if x > 0 { x * x // y=x^2 } else { -x * x // y=-x^2 } } } .chartXScale(domain: -5...5) .chartYScale(domain: -5...5) Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB ˞Πϝʔδ
۠ؔͰग़ྗ͕ͳ͍߹ w ۠ʹΑͬͯ6OEF fi OFEͷ͜ͱ͋Δ w OBOΛࢦఆ͢Δ͜ͱͰग़ྗ͕ͳ͍͜ͱΛ௨ f(x) =
{ x2 JG x > 0 6OEF fi OFE JG x ≤ 0 Chart { LinePlot(x: "x", y: "y") { x in if x > 0 { x * x // y=x^2 } else { .nan // ग़ྗ͕ͳ͍͜ͱΛ௨ } } } .chartXScale(domain: -5...5) .chartYScale(domain: -5...5) ˞Πϝʔδ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB
w ྫ͑ҎԼͷؔͷ߹ɺYʹͳΔͱʮ ʯͱͳΓɺΤϥʔʹͳΔͷͰආ͚ Δඞཁ͕͋Δɻ͜ͷ߹OBOΛࢦఆ͢Δ͜ͱͰճආ͢Δ͜ͱ͕Ͱ͖Δ 1 0 ۠ؔͰग़ྗ͕ͳ͍߹ y = {
6OEF fi OFE JG x = 0 1 x JG x ≠ 0 Chart { LinePlot(x: "x", y: "y") { x in if x != 0 { 1 / x } else { .nan // ग़ྗ͕ͳ͍͜ͱΛ௨ } } } .chartXScale(domain: -5...5) .chartYScale(domain: -5...5) ˞Πϝʔδ Ҿ༻ݩɿIUUQTXXXHFPHFCSBPSHHSBQIJOH MBOHKB
88%$Ͱͷ4XJGU$IBSUTͷΞοϓσʔτ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ w 1MPU-JOF1MPU "SFB1MPUҎ֎ʹɺશͯͷ.BSLʹରͯ͠1MPU͕Ճ͞Εͨ w ͜ΕΒͷ1MPUΛ͏͜ͱͰɺίϨΫγϣϯશମΛฒྻʹѻ͏͜ͱ͕Ͱ͖ɺ େنͳσʔλޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ w ͓ͦΒ͘.BSLͩͱσʔλྻͰѻΘΕ͍ͯͨ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
#BS.BSLͷఆٛํ๏ let dataList = [ (month: "Jan", value: 20), (month:
"Feb", value: 60), (month: "Mar", value: 45) ] … Chart(dataList, id: \.month) { BarMark( x: .value("Month", $0.month), y: .value("Value", $0.value) ) } w %BUBΛ$IBSUʹ͠ɺWBMVFͷΑ͏ʹΛࢦఆ͍ͯͨ͠
#BS1MPUͷఆٛํ๏ w %BUBΛ#BS1MPUͷҾʹ͠ɺ,FZ1BUIͰΛࢦఆՄೳʹͳͬͨ let dataList = [ (month: "Jan", value:
20), (month: "Feb", value: 60), (month: "Mar", value: 45) ] … Chart(dataList, id: \.month) { BarMark( x: .value("Month", $0.month), y: .value("Value", $0.value) ) } let dataList = [ (month: "Jan", value: 20), (month: "Feb", value: 60), (month: "Mar", value: 45) ] … Chart { BarPlot( dataList, x: .value("Month", \.month), y: .value("Value", \.value) ) }
ηογϣϯͰ͜Μͳදݱ w ӈਤΞϝϦΧͷιʔϥʔύωϧͷઃஔҐஔΛࣔͨ͠ͷ w ઃஔҐஔΛҢܦ͔Β1PJOU1MPUͰඳը w ਤࣗମ-JOF1MPUͰඳը w 4XJGU$IBSUT͕͋ΕԿͰඳ͚Δʜ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPODIBSUTDSFBUJOHBEBUBWJTVBMJ[BUJPOEBTICPBSEXJUITXJGUDIBSUT
1MPUͱ.BSLͷͲͪΒΛ͏͖͔ʁ w େنͳσʔληοτ͔ͭɺάϥϑશମ ͷݟ͕ͨγϯϓϧͳΧελϚΠζͷ ߹ʹ1MPUΛ͏͖ w σʔλগͳ͍͕ɺσʔλϙΠϯτ͝ͱ ʹݟͨͷΧελϚΠζΛ͢Δ߹ɺ [*OEFYΛͬͯෳࡶͳ֊Խ͕ඞཁͳ ߹.BSLΛ͏
1MPU .BSL Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
1MPUͷύϑΥʔϚϯεΛ্͛Δํ๏ w ༻͢ΔελΠϧ͝ͱʹσʔλͷίϨΫγϣϯΛάϧʔϓԽ͢Δ͜ͱͰɺ 4XJGU$IBSUT͕ελΠϧͷมߋճΛݮΒ͢͜ͱ͕Ͱ͖Δ w 1MPUͰDPNQVUFEϓϩύςΟͷར༻Λආ͚ɺ4UPSFEϓϩύςΟʹ͢Δ͜ͱ ͰϨϯμϦϯάॲཧΛܰݮͰ͖Δ w άϥϑͷදࣔ͢Δൣғ EPNBJO
Λ༧Ίࢦఆ͢Δ͜ͱͰΑΓޮతʹඳը͞Ε Δ w Ұ෦ͷελΠϧͷΧελϚΠζɺେྔͷσʔλϙΠϯτͰཱͨͳ͘ͳΔ ͷ͕ҰൠతͳͷͰɺελΠϧͷΧελϚΠζΛ͠ͳ͍ํ͕ɺάϥϑͷύϑΥʔ ϚϯεΛ্ͤ͞Δ͜ͱ͕Ͱ͖Δ
αϯϓϧ͋Δ Ҿ༻ݩɿIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPODIBSUTDSFBUJOHBEBUBWJTVBMJ[BUJPOEBTICPBSEXJUITXJGUDIBSUT
·ͱΊ w ؔΛͬͯάϥϑΛඳըͰ͖ΔΑ͏ʹͳͬͨ w -JOF1MPUɿͭͷؔΛඳըͰ͖Δ w "SFB1MPUɿͭͷؔͷؒΛຒΊΔ͜ͱ͕Ͱ͖Δ w ύϥϝτϦοΫؔ۠ؔ༻Ͱ͖Δ w
େنͳσʔλΛΑΓޮతʹॲཧͰ͖ΔΑ͏ʹͳͬͨ w 1MPUΛ͏͜ͱͰฒྻʹσʔλΛॲཧͰ͖Δ w 1MPUͰ,FZ1BUIͰΛࢦఆͰ͖Δ w 1MPUͷύϑΥʔϚϯεΛ্͛Δํ๏͕͋Δ
ࢀߟࢿྉ w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPODIBSUTDSFBUJOHBEBUB WJTVBMJ[BUJPOEBTICPBSEXJUITXJGUDIBSUT w IUUQTRJJUBDPNZBNBLFOUPDJUFNTBECDBG