Slide 1

Slide 1 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. USFBTUSBJO5BOBLB3ZPHB ͋ΒΏΔ৘ใΛ 
 ָʹਖ਼͘͠4USJOHʹϑΥʔϚοτ͢Δ ʙྩ࿨೥͔Β୤٫ͤΑʙ 1 iOSDC Japan 2021 
 Day 2 #iosdc #d

Slide 2

Slide 2 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ͜ͷηογϣϯͰ෼͔Δ͜ͱ $POUFOUT w ͳͥ'PSNBUUFSΛ࢖ͬͨ΄͏͕Α͍ͷ͔ w J04Ͱ௥Ճ͞Εͨ৽ػೳ w J04ʢɾNBD04ɾUW04ɾXBUDI04ʣͰ༻ҙ͞Ε͍ͯΔ 
 'PSNBUUFSͷ͢΂ͯͷ࢖༻ྫΛ঺հ w ઈରʹͯ͠͸ͳΒͳ͍'PSNBUUFSͷ࢖͍ํ 2

Slide 3

Slide 3 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 3

Slide 4

Slide 4 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 4

Slide 5

Slide 5 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 5

Slide 6

Slide 6 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 6

Slide 7

Slide 7 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 7 Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved.

Slide 8

Slide 8 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 4XJGU J04 XBUDI04 $PSF/'$ 044 
 ɹɹJU`TNZNPUIFSUPOHVF ɹɹɹɹɹɹɹɹɹɹ!USFBTUSBJOɹɹIUUQTUSFUKQ 
 
 
 %F/"$P -UE 
 ɹɹJ04"QQ&OHJOFFSʢ"QSJM$VSSFOUʣ USFBTUSBJO5BOBLB3ZPHB "CPVUNF 8

Slide 9

Slide 9 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. +BQBO/'$3FBEFS $IFDLUIFCBMBODFPGZPVSFNPOFZDBSEPOZPVSJ1IPOF 9 J1IPOFͰిࢠϚωʔͷ 
 ࢒ߴɾར༻ཤྺͷಡΈऔΓ J1IPOFͰಡΈऔͬͨཤྺΛ 
 J$MPVEܦ༝ͰଞͷσόΠε͔Β֬ೝͰ͖Δ ೥݄ϦϦʔεɹμ΢ϯϩʔυ਺, !+BQBO/'$3FBEFS J04"QQ

Slide 10

Slide 10 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 53&5+BQBO/'$3FBEFS .*5-JDFODF IUUQTHJUIVCDPNUSFBTUSBJO53&5+BQBO/'$3FBEFS +BQBO/'$3FBEFSͷίΞ෦෼Λ044Խͨ͠ϥΠϒϥϦ *OJUJBMDPNNJU೥݄೔ɹ4UBST🌟೥݄೔࣌఺ 10 044-JCSBSZ

Slide 11

Slide 11 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 4XJGU J04 XBUDI04 $PSF/'$ 044 
 ɹɹJU`TNZNPUIFSUPOHVF ɹɹɹɹɹɹɹɹɹɹ!USFBTUSBJOɹɹIUUQTUSFUKQ 
 
 
 %F/"$P -UE 
 ɹɹJ04"QQ%FWFMPQFSʢ"QSJM$VSSFOUʣ USFBTUSBJO5BOBLB3ZPHB "CPVUNF 11

Slide 12

Slide 12 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ීஈऔΓѻ͏͞·͟·ͳσʔλ 7BSJPVTEBUBUIBUXFVTFPOBEBJMZCBTJT 12 ೔෇ ೔࣌ ࣌ؒ ࣌ࠁ ௨՟ ඦ෼཰ʢʣ σʔλ༰ྔ ਓͷ໊લ ࢦ਺දه Թ౓ ଎౓ ࣭ྔ ໘ੵ ֯౓ ిѹ ѹྗ Ճ଎౓ ిՙ ௕͞ ిྲྀ ೱ౓ ిؾ఍߅ प೾਺ ΤωϧΪʔ ମੵ ిྗ র౓ ೩අ ظؒ

Slide 13

Slide 13 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 13 ? ? ? ? ? ? Date String

Slide 14

Slide 14 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 14 NumberFormatter | Apple Developer Documentation

Slide 15

Slide 15 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ͋ͳ͕ͨ஌͍ͬͯΔ˓˓˓'PSNBUUFS͸ʁ 8IBUl'PSNBUUFSzEPZPVLOPX 15

Slide 16

Slide 16 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ͜ͷηογϣϯͰ෼͔Δ͜ͱ $POUFOUT w ͳͥ'PSNBUUFSΛ࢖ͬͨ΄͏͕Α͍ͷ͔ w J04Ͱ௥Ճ͞Εͨ৽ػೳ w J04ʢɾNBD04ɾUW04ɾXBUDI04ʣͰ༻ҙ͞Ε͍ͯΔ 
 'PSNBUUFSͷ͢΂ͯͷ࢖༻ྫΛ঺հ w ઈରʹͯ͠͸ͳΒͳ͍'PSNBUUFSͷ࢖͍ํ 16

Slide 17

Slide 17 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ͳͥ'PSNBUUFSΛ࢖ͬͨ΄͏͕Α͍ͷ͔ 8IZTIPVMEXFVTFl'PSNBUUFSz w ࣗ෼ͰॲཧΛ࣮૷͢Δඞཁ͕ͳ͘ͳΔ w ޻਺Λ୹ॖͰ͖Δ w ߟྀ࿙ΕΛ๷͛Δ w ϩʔΧϥΠζ·Ͱڧྗʹαϙʔτ͞Ε͍ͯΔ w 04ଆͰαϙʔτ͕Ξοϓσʔτ͞ΕΔ 17

Slide 18

Slide 18 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ಠ࣮ࣗ૷͕ෆཁͰ͋Δ /POFFEGPSQSPQSJFUBSZJNQMFNFOUBUJPO w ਺ࣈʢ*OU΍%PVCMFʣ͔Β4USJOH΁ͷϑΥʔϚοτ w ܻ͓͖ʹʮ ʯΛೖΕΔ 18 // 1000 ͷͱ͖͸ "1,000" // 1000000 ͷͱ͖͸ "1,000,000" // 3141.59 ͷͱ͖͸ "3,141.59"

Slide 19

Slide 19 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ಠ࣮ࣗ૷͕ෆཁͰ͋Δ /POFFEGPSQSPQSJFUBSZJNQMFNFOUBUJPO w ਺ࣈʢ*OU΍%PVCMFʣ͔Β4USJOH΁ͷϑΥʔϚοτ w ܻ͓͖ʹʮ ʯΛೖΕΔ 19 let formatter = NumberFormatter() formatter.numberStyle = .decimal print(formatter.string(from: 1521)) // Optional("1,521")

Slide 20

Slide 20 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ಠ࣮ࣗ૷͕ෆཁͰ͋Δ /POFFEGPSQSPQSJFUBSZJNQMFNFOUBUJPO w ਺ࣈͷϑΥʔϚολʔҎ֎΋ 
 ๛෋ʹ༻ҙ͞Ε͍ͯΔ 20

Slide 21

Slide 21 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ϩʔΧϥΠζͷαϙʔτ 4VQQPSUGPSMPDBMJ[BUJPO w ͜ͷܭࢉػʹೖྗ͞Εͨ਺ࣈ͸͍͔ͭ͘ʁ w ਖ਼ղ͸ 
 ʮ͍ͪͯΜ͝ʹ͍ͪʯ 21

Slide 22

Slide 22 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ϩʔΧϥΠζͷαϙʔτ 4VQQPSUGPSMPDBMJ[BUJPO w ͜ͷJ1IPOFͷઃఆ w ʮӳޠʯʮϑϥϯεʯʮ࿨ྐྵʯ 22 print(Locale.current) // en_FR (current) let formatter = NumberFormatter() formatter.numberStyle = .decimal print(formatter.string(from: 1.521)) // Optional("1,521")

Slide 23

Slide 23 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ϩʔΧϥΠζͷαϙʔτ 4VQQPSUGPSMPDBMJ[BUJPO w ͜ͷJ1IPOFͷઃఆ w ʮΞϥϏΞޠʯʮΤδϓτʯ 23 print(Locale.current) // ar_EG (current) let formatter = NumberFormatter() formatter.numberStyle = .decimal print(formatter.string(from: 1.521)) // Optional(“١٫٥٢١")

Slide 24

Slide 24 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ͜ͷηογϣϯͰ෼͔Δ͜ͱ $POUFOUT w ͳͥ'PSNBUUFSΛ࢖ͬͨ΄͏͕Α͍ͷ͔ w J04Ͱ௥Ճ͞Εͨ৽ػೳ w J04ʢɾNBD04ɾUW04ɾXBUDI04ʣͰ༻ҙ͞Ε͍ͯΔ 
 'PSNBUUFSͷ͢΂ͯͷ࢖༻ྫΛ঺հ w ઈରʹͯ͠͸ͳΒͳ͍'PSNBUUFSͷ࢖͍ํ 24

Slide 25

Slide 25 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 'PSNBU4UZMF /PPWFSWJFXBWBJMBCMF 25 /// A type that can convert a given data type into a representation. @available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) public protocol FormatStyle : Decodable, Encodable, Hashable

Slide 26

Slide 26 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 'PSNBU4UZMF /PPWFSWJFXBWBJMBCMF 26 let formatter = NumberFormatter() formatter.numberStyle = .decimal print(formatter.string(from: 1521)) // Optional("1,521") print(1521.formatted()) // "1,521"

Slide 27

Slide 27 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 'PSNBU4UZMF /PPWFSWJFXBWBJMBCMF 27 struct ContentView: View { var body: some View { // Formatted Number: 1,521 Text("Formatted Number: \(1521.formatted())") } }

Slide 28

Slide 28 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ͜ͷηογϣϯͰ෼͔Δ͜ͱ $POUFOUT w ͳͥ'PSNBUUFSΛ࢖ͬͨ΄͏͕Α͍ͷ͔ w J04Ͱ௥Ճ͞Εͨ৽ػೳ w J04ʢɾNBD04ɾUW04ɾXBUDI04ʣͰ༻ҙ͞Ε͍ͯΔ 
 'PSNBUUFSͷ͢΂ͯͷ࢖༻ྫΛ঺հ w ઈରʹͯ͠͸ͳΒͳ͍'PSNBUUFSͷ࢖͍ํ 28

Slide 29

Slide 29 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 'PSNBUBMMUIFUIJOHT 
 l͢΂ͯΛϑΥʔϚοτ͢Δz 29 'PSNBUUFST.BLFEBUBIVNBOGSJFOEMZ"QQMF88%$

Slide 30

Slide 30 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 30 123

Slide 31

Slide 31 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 31 Formatters 40 1 Numbers & Currency Integer ੔਺ 123 1234

Slide 32

Slide 32 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ੔਺ *OUFHFS w ਺ࣈΛ੔਺ʹͨ͠4USJOHΛಘΔ w ࢛ࣺޒೖɺ੾Γࣺͯɾ੾Γ্͛ͳͲͷΦϓγϣϯ 32 let formatter = NumberFormatter() formatter.numberStyle = .none print(formatter.string(from: 1234.5678)) // Optional("1235") formatter.roundingMode = .down print(formatter.string(from: 1234.5678)) // Optional("1234")

Slide 33

Slide 33 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 33 1,000 Formatters 40 2 Decimal Numbers & Currency ਐ਺ 123

Slide 34

Slide 34 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ਐ਺ %FDJNBM w ਺ࣈΛਐ਺දهʹͨ͠4USJOHΛಘΔ w ਺ࣈʹؔ͢Δ͋ΒΏΔઃఆΦϓγϣϯ w Oܻ۠੾Γɾখ਺఺Ͱ࢖͏ه߸ͷࢦఆ w ઌ಄ʹεϖʔεΛೖΕΔ w ༗ޮ਺ࣈܻ਺ w FUDʜ 34

Slide 35

Slide 35 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ਐ਺ %FDJNBM 35 let formatter = NumberFormatter() formatter.numberStyle = .decimal print(formatter.string(from: 1234.5678)) // Optional("1,234.568") print(formatter.groupingSize) // 3 print(formatter.groupingSeparator) // Optional(",") print(formatter.decimalSeparator) // Optional(".") formatter.formatWidth = 5 print(formatter.string(from: 1)) // Optional(" 1") print(formatter.string(from: 12)) // Optional(" 12") print(formatter.string(from: 123)) // Optional(" 123") print(formatter.string(from: 1234)) // Optional("1,234") formatter.maximumSignificantDigits = 5 print(formatter.string(from: 1234.5678)) // Optional("1,234.6")

Slide 36

Slide 36 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 36 50% Formatters 40 3 Percent ύʔηϯτʢඦ෼཰ʣ Numbers & Currency 123

Slide 37

Slide 37 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ύʔηϯτʢඦ෼཰ʣ 1FSDFOU 37 let formatter = NumberFormatter() formatter.numberStyle = .percent print(formatter.string(from: 0.1)) // Optional("10%") print(formatter.string(from: 0.05)) // Optional("5%") print(formatter.string(from: -0.28)) // Optional("-28%") formatter.locale = Locale(identifier: "ar_EG") print(formatter.string(from: 0.01)) // Optional("١٪") print(formatter.percentSymbol) // Optional("٪") formatter.locale = Locale(identifier: "ja_JP") formatter.percentSymbol = "ύʔηϯτ" print(formatter.string(from: 0.03)) // Optional("3ύʔηϯτ") // available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) print(0.02.formatted(.percent)) // 2%

Slide 38

Slide 38 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 38 1.62E2 Formatters 40 4 Scientific Պֶʢࢦ਺ʣදه Numbers & Currency 123

Slide 39

Slide 39 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. Պֶʢࢦ਺ʣදه 4DJFOUJ fi D 39 let formatter = NumberFormatter() formatter.numberStyle = .scientific print(formatter.string(from: 162)) // Optional("1.62E2") formatter.exponentSymbol = "e" print(formatter.string(from: 31.4)) // Optional("3.14e1")

Slide 40

Slide 40 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 40 two thousand 
 twenty-one Formatters 40 5 Spell Out ௲Γ Numbers & Currency 123

Slide 41

Slide 41 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ௲Γ 4QFMM0VU 41 let formatter = NumberFormatter() formatter.numberStyle = .spellOut formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: 162)) // Optional("ඦ࿡ेೋ") print(formatter.string(from: 31.4)) // Optional("ࡾेҰɾ࢛") print(formatter.string(from: -256)) // Optional("ϚΠφεೋඦޒे࿡") formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: 162)) // Optional("one hundred sixty-two") print(formatter.string(from: 31.4)) // Optional("thirty-one point four") print(formatter.string(from: -256)) // Optional("minus two hundred fifty-six")

Slide 42

Slide 42 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 42 1st Formatters 40 6 Ordinal ং਺ Numbers & Currency 123

Slide 43

Slide 43 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ং਺ 0SEJOBM 43 let formatter = NumberFormatter() formatter.numberStyle = .ordinal formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: 1)) // Optional("1st") print(formatter.string(from: 2)) // Optional("2nd") print(formatter.string(from: 3)) // Optional("3rd") print(formatter.string(from: 4)) // Optional("4th") formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: 1)) // Optional("ୈ1") print(formatter.string(from: 2)) // Optional("ୈ2") print(formatter.string(from: 3)) // Optional("ୈ3") print(formatter.string(from: 4)) // Optional("ୈ4")

Slide 44

Slide 44 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 44 ¥1,538 Formatters 40 7 Currency ௨՟ Numbers & Currency

Slide 45

Slide 45 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ௨՟ $VSSFODZ 45 let formatter = NumberFormatter() formatter.numberStyle = .currency formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: 100)) // Optional("¥100") formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: 100)) // Optional("$100.00") formatter.locale = Locale(identifier: "zh_HK") print(formatter.string(from: 100)) // Optional("HK$100.00") formatter.maximumFractionDigits = 0 print(formatter.string(from: 100)) // Optional("HK$100") // available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) print(120.formatted(.currency(code: "JPY"))) // ¥120

Slide 46

Slide 46 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 46 Formatters 40 8 Currency Plural ௨՟ʢ୯Ґෳ਺ܗରԠʣ Numbers & Currency 226.78 
 US dollars

Slide 47

Slide 47 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ௨՟ʢ୯Ґෳ਺ܗରԠʣ $VSSFODZ1MVSBM 47 let formatter = NumberFormatter() formatter.numberStyle = .currencyPlural formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: 100)) // Optional("100 ԁ") formatter.locale = Locale(identifier: "en_JP") print(formatter.string(from: 100)) // Optional("100 Japanese yen") formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: 100)) // Optional("100.00 US dollars") formatter.locale = Locale(identifier: "zh_HK") print(formatter.string(from: 100)) // Optional("100.00 ߓݩ") formatter.locale = Locale(identifier: "en_HK") print(formatter.string(from: 100)) // Optional("100.00 Hong Kong dollars")

Slide 48

Slide 48 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 48 JPY 1,538 Formatters 40 9 Currency 
 ISO Code ௨՟ίʔυ Numbers & Currency

Slide 49

Slide 49 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ௨՟ίʔυ $VSSFODZ*40$PEF 49 let formatter = NumberFormatter() formatter.numberStyle = .currencyISOCode formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: 100)) // Optional("JPY 100") formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: 100)) // Optional("USD 100.00") formatter.locale = Locale(identifier: "en_GB") print(formatter.string(from: 100)) // Optional("GBP 100.00") formatter.locale = Locale(identifier: "zh_HK") print(formatter.string(from: 100)) // Optional("HKD 100.00")

Slide 50

Slide 50 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 50 ( ¥1,538 ) Formatters 40 10 Currency Accounting ձܭ Numbers & Currency

Slide 51

Slide 51 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ձܭ $VSSFODZ"DDPVOUJOH 51 let formatter = NumberFormatter() formatter.numberStyle = .currencyAccounting print(formatter.string(from: 1537)) // Optional("¥1,537") print(formatter.string(from: -1537)) // Optional("(¥1,537)") print(formatter.negativePrefix) // Optional("(¥") print(formatter.negativeSuffix) // Optional(")") formatter.negativePrefix = "△" formatter.negativeSuffix = "" print(formatter.string(from: -1200)) // Optional("△1,200")

Slide 52

Slide 52 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 52 Formatters 40 11 Person’s Name Names ਓͷ໊લ AI ࢁా क ु จ

Slide 53

Slide 53 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ਓͷ໊લ 1FSTPO`T/BNF 53 let formatter = PersonNameComponentsFormatter() var nameComponents = PersonNameComponents() nameComponents.familyName = "Tanaka" nameComponents.givenName = "Ryoga" nameComponents.nickname = "treastrain" formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: nameComponents)) // Ryoga Tanaka formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: nameComponents)) // Tanaka Ryoga formatter.style = .abbreviated print(formatter.string(from: nameComponents)) // TR // available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) print(nameComponents.formatted()) // Tanaka Ryoga print(nameComponents.formatted(.name(style: .short))) // treastrain print(nameComponents.formatted(.name(style: .medium))) // Tanaka Ryoga print(nameComponents.formatted(.name(style: .long))) // Tanaka Ryoga print(nameComponents.formatted(.name(style: .abbreviated))) // TR

Slide 54

Slide 54 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ਓͷ໊લ 1FSTPO`T/BNF 54 let formatter = PersonNameComponentsFormatter() var nameComponents = PersonNameComponents() nameComponents.familyName = "ᖂᖒ" nameComponents.givenName = "ᒇҰ" nameComponents.nameSuffix = "ઌੜ" nameComponents.nickname = "͍͑ͪΌΜ" formatter.style = .abbreviated print(formatter.string(from: nameComponents)) // ᖂᖒ formatter.style = .short print(formatter.string(from: nameComponents)) // ͍͑ͪΌΜ formatter.style = .medium print(formatter.string(from: nameComponents)) // ᖂᖒᒇҰ formatter.style = .long print(formatter.string(from: nameComponents)) // ᖂᖒᒇҰઌੜ // available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) print(nameComponents.formatted()) // ᖂᖒᒇҰ

Slide 55

Slide 55 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ਓͷ໊લ 1FSTPO`T/BNF 55 let formatter = PersonNameComponentsFormatter() var components = formatter.personNameComponents(from: "וম͞Μ ଠ࿠") print(components?.familyName) // Optional("וম͞Μ") print(components?.middleName) // nil print(components?.givenName) // Optional("ଠ࿠") components = formatter.personNameComponents(from: "John Appleseed") print(components?.familyName) // Optional("Appleseed") print(components?.middleName) // nil print(components?.givenName) // Optional("John") // iOSDC Japan 2020 - Day 0 - Track B // ͋ͳͨͷ஌Βͳ͍࿈བྷઌͷੈք by ೔޲ڧ / coffeegyunyu // Λͥͻࢀর͍ͩ͘͞

Slide 56

Slide 56 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 56 2021/09/19 11 : 30 : 00 Formatters 40 12 Dates Dates & Times ೔࣌

Slide 57

Slide 57 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ೔࣌ %BUFT 57 let date = Date(timeIntervalSince1970: 1632018600) let formatter = DateFormatter() formatter.dateStyle = .medium formatter.timeStyle = .short formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: date)) // 2021/09/19 11:30 formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: date)) // Sep 19, 2021 at 11:30 AM formatter.locale = Locale(identifier: "zh_HK") print(formatter.string(from: date)) // 2021೥9݄19೔ ্ޕ11:30 // available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) print(date.formatted(date: .complete, time: .shortened)) // 2021೥9݄19೔ ೔༵೔ 11:30

Slide 58

Slide 58 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ೔࣌ %BUFT 58 let date = Date(timeIntervalSince1970: 1632018600) let formatter = DateFormatter() formatter.locale = Locale(identifier: "ja_JP") formatter.calendar = Calendar(identifier: .japanese) formatter.dateFormat = "GyMMM" print(formatter.string(from: date)) // ྩ࿨39݄ formatter.locale = Locale(identifier: "en_US") formatter.calendar = Calendar(identifier: .gregorian) formatter.dateFormat = "GyMMM" print(formatter.string(from: date)) // AD2021Sep

Slide 59

Slide 59 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 59 ˞࣮ࡍͷݪҼʹ͍ͭͯ͸ෆ໌Ͱ͢ɻ 
 ˞ݱࡏ͸मਖ਼͞Ε͍ͯ·͢ɻ

Slide 60

Slide 60 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ೔࣌ %BUFT 60 let date = Date(timeIntervalSince1970: 1632018600) let formatter = DateFormatter() formatter.locale = Locale(identifier: "ja_JP") formatter.calendar = Calendar(identifier: .japanese) formatter.setLocalizedDateFormatFromTemplate("GyMMM") print(formatter.string(from: date)) // ྩ࿨3೥9݄ formatter.locale = Locale(identifier: "en_US") formatter.calendar = Calendar(identifier: .gregorian) formatter.setLocalizedDateFormatFromTemplate("GyMMM") print(formatter.string(from: date)) // Sep 2021 AD

Slide 61

Slide 61 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 61 2 days, 
 1 hr, 50 min Formatters 40 13 Quantities of Time Dates & Times ࣌ؒ

Slide 62

Slide 62 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ࣌ؒ 2VBOUJUJFTPG5JNF 62 // ͸΍Ϳ͞44߸ ৽വؗ๺ే~౦ژ ॴཁ࣌ؒ let components = DateComponents(hour: 3, minute: 58) let formatter = DateComponentsFormatter() formatter.calendar?.locale = Locale(identifier: "ja_JP") formatter.unitsStyle = .positional print(formatter.string(from: components)) // Optional("3:58") formatter.unitsStyle = .abbreviated print(formatter.string(from: components)) // Optional("3࣌ؒ58෼") formatter.unitsStyle = .spellOut print(formatter.string(from: components)) // Optional("ࡾ࣌ؒ ޒेീ෼") formatter.calendar?.locale = Locale(identifier: "en_US") formatter.unitsStyle = .positional print(formatter.string(from: components)) // Optional("3:58") formatter.unitsStyle = .abbreviated print(formatter.string(from: components)) // Optional("3h 58m") formatter.unitsStyle = .spellOut print(formatter.string(from: components)) // Optional("three hours, fifty-eight minutes")

Slide 63

Slide 63 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 63 2 days ago Formatters 40 14 Relative 
 Date or Time Dates & Times ૬ରతͳ೔࣌

Slide 64

Slide 64 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ૬ରతͳ೔࣌ 3FMBUJWF%BUFPS5JNF 64 let formatter = RelativeDateTimeFormatter() formatter.dateTimeStyle = .numeric print(formatter.localizedString(from: DateComponents(month: -1))) // 1 ͔݄લ print(formatter.localizedString(from: DateComponents(month: 0))) // 0 ͔݄ޙ print(formatter.localizedString(from: DateComponents(month: 1))) // 1 ͔݄ޙ formatter.dateTimeStyle = .named print(formatter.localizedString(from: DateComponents(month: -1))) // ઌ݄ print(formatter.localizedString(from: DateComponents(month: 0))) // ࠓ݄ print(formatter.localizedString(from: DateComponents(month: 1))) // དྷ݄

Slide 65

Slide 65 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ૬ରతͳ೔࣌ 3FMBUJWF%BUFPS5JNF 65 let formatter = RelativeDateTimeFormatter() formatter.dateTimeStyle = .named print(formatter.localizedString(from: DateComponents(day: -3))) // 3 ೔લ print(formatter.localizedString(from: DateComponents(day: -2))) // Ұࡢ೔ print(formatter.localizedString(from: DateComponents(day: -1))) // ࡢ೔ print(formatter.localizedString(from: DateComponents(day: 0))) // ࠓ೔ print(formatter.localizedString(from: DateComponents(day: 1))) // ໌೔ print(formatter.localizedString(from: DateComponents(day: 2))) // ໌ޙ೔ print(formatter.localizedString(from: DateComponents(day: 3))) // 3 ೔ޙ

Slide 66

Slide 66 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 66 Fri, Sep 17, 
 2021 17 : 00 
 – 
 Sun, Sep 19, 
 2021 18 : 50 Formatters 40 15 Time Intervals Dates & Times ִ࣌ؒؒ

Slide 67

Slide 67 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ִ࣌ؒؒ 5JNF*OUFSWBMT 67 let startDate = Date(timeIntervalSince1970: 1631865600) let endDate = Date(timeIntervalSince1970: 1632045000) let formatter = DateIntervalFormatter() formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: startDate, to: endDate)) // 9/17/21, 5:00 PM – 9/19/21, 6:50 PM formatter.locale = Locale(identifier: "zh_HK") print(formatter.string(from: startDate, to: endDate)) // 17/9/2021 Լޕ5:00ࢸ19/9/2021 Լޕ6:50 formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: startDate, to: endDate)) // 2021/09/17 17:00ʙ2021/09/19 18:50 formatter.dateTemplate = "EEE, MMM d, ''yyyy" print(formatter.string(from: startDate, to: endDate)) // 2021೥9݄17೔(ۚ)ʙ19೔(೔)

Slide 68

Slide 68 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 68 2021 - 09 - 19 
 T11 : 30 : 00 + 09 : 00 Formatters 40 16 ISO 8601 Format Dates & Times *40ܗࣜͷ೔࣌

Slide 69

Slide 69 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. *40ܗࣜͷ೔࣌ *40'PSNBU 69 let date = Date(timeIntervalSince1970: 1632018600) let formatter = ISO8601DateFormatter() print(formatter.string(from: date)) // 2021-09-19T02:30:00Z formatter.timeZone = TimeZone(identifier: "Asia/Tokyo") print(formatter.string(from: date)) // 2021-09-19T11:30:00+09:00 // available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) print(date.formatted(.iso8601)) // 2021-09-19T02:30:00Z

Slide 70

Slide 70 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 70 31.25 GB Formatters 40 17 Data Sizes Data Sizes σʔλαΠζ

Slide 71

Slide 71 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. σʔλαΠζ %BUB4J[FT 71 // Xcode 12.5.1 ͷαΠζ: 29,509,386,405όΠτ let byteCount: Int64 = 29509386405 let formatter = ByteCountFormatter() formatter.countStyle = .file print(formatter.string(fromByteCount: byteCount)) // 29.51 GB formatter.countStyle = .memory print(formatter.string(fromByteCount: byteCount)) // 27.48 GB formatter.countStyle = .file formatter.allowedUnits = .useMB print(formatter.string(fromByteCount: byteCount)) // 29,509.4 MB // available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) print(byteCount.formatted(.byteCount(style: .file))) // 29.51 GB

Slide 72

Slide 72 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 72 631.9 km Formatters 40 18 Length Physical Dimension ௕͞

Slide 73

Slide 73 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ௕͞ -FOHUI 73 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") var length = Measurement(value: 900, unit: .meters) print(formatter.string(from: length)) // 0.9 km length = length + Measurement(value: 631, unit: .kilometers) print(formatter.string(from: length)) // 631.9 km formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: length)) // 392.644 mi

Slide 74

Slide 74 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 74 15.11 km² Formatters 40 19 Area Physical Dimension ໘ੵ

Slide 75

Slide 75 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ໘ੵ "SFB 75 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") var area = Measurement(value: 15.11, unit: .squareKilometers) print(formatter.string(from: area)) // 15.11 km² area.convert(to: .ares) formatter.unitOptions = .providedUnit print(formatter.string(from: area)) // 151,100 a

Slide 76

Slide 76 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. l௕͞zΛ࢖ͬͯ໘ੵ͸ٻΊΒΕΔ͔ʁ /P 76 let length1 = Measurement(value: 10, unit: .meters) let length2 = Measurement(value: 20, unit: .meters) let length3 = length1 + length2 // 30 m // Binary operator '*' cannot be applied to two 'Measurement' operands // let length4 = length1 * length2 let length5 = 5 * length1 // 50 m

Slide 77

Slide 77 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 77 525 ml Formatters 40 20 Volume Physical Dimension ମੵ

Slide 78

Slide 78 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ମੵ 7PMVNF 78 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") let volume1 = Measurement(value: 525, unit: .milliliters) print(formatter.string(from: volume1)) // 0.525 L formatter.unitOptions = .providedUnit var volume2 = Measurement(value: 1, unit: .gallons) print(formatter.string(from: volume2)) // 1 gal volume2.convert(to: .imperialGallons) print(formatter.string(from: volume2)) // 0.833 gal Imp.

Slide 79

Slide 79 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 79 1.047 rad Formatters 40 21 Angle Physical Dimension ֯౓

Slide 80

Slide 80 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ֯౓ "OHMF 80 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") var angle = Measurement(value: 60, unit: .degrees) print(formatter.string(from: angle)) // 60౓ angle.convert(to: .radians) print(formatter.string(from: angle)) // 1.047 rad

Slide 81

Slide 81 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 81 0.187 kg Formatters 40 22 Mass Mass, Weight & Force ࣭ྔ

Slide 82

Slide 82 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 82 1,013.25 hPa Formatters 40 23 Pressure Mass, Weight & Force ѹྗ

Slide 83

Slide 83 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ࣭ྔɾѹྗ .BTT1SFTTVSF 83 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") let mass = Measurement(value: 187, unit: .grams) print(formatter.string(from: mass)) // 0.187 kg let pressure = Measurement(value: 1013.25, unit: .hectopascals) print(formatter.string(from: pressure)) // 1,013.25 hPa

Slide 84

Slide 84 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 84 9.81 m/s² Formatters 40 24 Acceleration Time & Motion Ճ଎౓

Slide 85

Slide 85 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. Ճ଎౓ "DDFMFSBUJPO 85 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") var acceleration = Measurement(value: 1, unit: .gravity) // 1 G print(formatter.string(from: acceleration)) acceleration.convert(to: .metersPerSecondSquared) print(formatter.string(from: acceleration)) // 9.81 m/s²

Slide 86

Slide 86 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 86 3.967 hr Formatters 40 25 Duration Time & Motion ܧଓ࣌ؒ

Slide 87

Slide 87 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 87 50 Hz Formatters 40 26 Frequency Time & Motion प೾਺

Slide 88

Slide 88 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ܧଓ࣌ؒɾप೾਺ %VSBUJPO'SFRVFODZ 88 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") var duration = Measurement(value: 1, unit: .hours) duration = duration + Measurement(value: 30, unit: .minutes) print(formatter.string(from: duration)) // 5,400ඵ duration.convert(to: .hours) formatter.unitOptions = .providedUnit print(formatter.string(from: duration)) // 1.5࣌ؒ let frequency = Measurement(value: 50, unit: .hertz) print(formatter.string(from: frequency)) // 50 Hz

Slide 89

Slide 89 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 89 320 km/h Formatters 40 27 Speed Time & Motion ଎͞

Slide 90

Slide 90 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ଎͞ 4QFFE 90 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") let speed = Measurement(value: 320, unit: .kilometersPerHour) print(formatter.string(from: speed)) // 320 km/h formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: speed)) // 198.839 mph

Slide 91

Slide 91 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 91 9.8 J Formatters 40 28 Energy Energy, Heat, & Light ΤωϧΪʔ

Slide 92

Slide 92 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 92 61 W Formatters 40 29 Power Energy, Heat, & Light ిྗ

Slide 93

Slide 93 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ΤωϧΪʔɾిྗ &OFSHZ1PXFS 93 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") var energy = Measurement(value: 418400, unit: .joules) print(formatter.string(from: energy)) // 100 kcal energy.convert(to: .kilowattHours) formatter.unitOptions = .providedUnit print(formatter.string(from: energy)) // 0.116 kWh var power = Measurement(value: 61, unit: .watts) print(formatter.string(from: power)) // 61 W power.convert(to: .horsepower) print(formatter.string(from: power)) // 0.082അྗ

Slide 94

Slide 94 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 94 273.15 K Formatters 40 30 Temperature Energy, Heat, & Light Թ౓

Slide 95

Slide 95 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 95 500 lx Formatters 40 Illuminance 31 Energy, Heat, & Light র౓

Slide 96

Slide 96 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. Թ౓ɾর౓ 5FNQFSBUVSF*MMVNJOBODF 96 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") var temperature = Measurement(value: 273.15, unit: .kelvin) print(formatter.string(from: temperature)) // 0°C temperature.convert(to: .fahrenheit) formatter.unitOptions = .providedUnit print(formatter.string(from: temperature)) // 32°F let illuminance = Measurement(value: 500, unit: .lux) print(formatter.string(from: illuminance)) // 500 lx

Slide 97

Slide 97 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 97 2,815 mAh Formatters 40 32 Electric Charge Electricity ిՙ

Slide 98

Slide 98 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 98 500 mA Formatters 40 33 Electric Current Electricity ిྲྀ

Slide 99

Slide 99 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 99 141.421 V Formatters 40 34 Electric 
 Potential Difference Electricity ిҐࠩʢిѹʣ

Slide 100

Slide 100 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 100 2.4 kΩ Formatters 40 35 Electric Resistance Electricity ిؾ఍߅

Slide 101

Slide 101 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ిՙɾిྲྀɾిҐࠩʢిѹʣɾిؾ఍߅ &MFDUSJD$IBSHF$VSSFOU1PUFOUJBM%J ff FSFODF3FTJTUBODF 101 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") let q = Measurement(value: 2815, unit: .milliampereHours) print(formatter.string(from: q)) // 2,815 mAh let i = Measurement(value: 0.5, unit: .milliamperes) print(formatter.string(from: i)) // 500 mA let e = Measurement(value: 141.421, unit: .volts) print(formatter.string(from: e)) // 141.421 V let r = Measurement(value: 2.4, unit: .kiloohms) print(formatter.string(from: r)) // 2,400 Ω

Slide 102

Slide 102 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 102 0.154 g/L Formatters 40 36 Concentration of Mass Concentration & Dispersion ࣭ྔೱ౓

Slide 103

Slide 103 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 103 410.5 ppm Formatters 40 37 Dispersion Concentration & Dispersion ෼ࢄ

Slide 104

Slide 104 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ࣭ྔೱ౓ɾ෼ࢄ $PODFOUSBUJPOPG.BTT%JTQFSTJPO 104 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") let concentrationOfMass = Measurement(value: 0.154, unit: .gramsPerLiter) print(formatter.string(from: concentrationOfMass)) // 0.154 g/L let dispersion = Measurement(value: 410.5, unit: .partsPerMillion) print(formatter.string(from: dispersion)) // 410.5 ppm

Slide 105

Slide 105 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 105 3.115 L/100km Formatters 40 38 Fuel Efficiency Fuel Efficiency ೩අ

Slide 106

Slide 106 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ೩අ 'VFM& ff i DJFODZ 106 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") let fuelEfficiency = Measurement(value: 3.115, unit: .litersPer100Kilometers) print(formatter.string(from: fuelEfficiency)) // 3.115 L/100km

Slide 107

Slide 107 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 107 29.104 GiB Formatters 40 39 Amount of Information Data Storage ৘ใྔ

Slide 108

Slide 108 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ৘ใྔ "NPVOUPG*OGPSNBUJPO 108 let formatter = MeasurementFormatter() formatter.locale = Locale(identifier: "ja_JP") var amount = Measurement(value: 29.51, unit: .gigabytes) print(formatter.string(from: amount)) // 29.51 GB amount.convert(to: .gigabits) print(formatter.string(from: amount)) // 236.08 Gb let byteCountFormatter = ByteCountFormatter() print(byteCountFormatter.string(from: amount)) // 29.51 GB

Slide 109

Slide 109 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 109 iPhone, 
 iPad, 
 and iPod touch Formatters 40 40 Lists Lists Ϧετ

Slide 110

Slide 110 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. Ϧετ -JTUT 110 let formatter = ListFormatter() var items = ["ΓΜ͝", "όφφ", "ΦϨϯδ"] formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: items)) // Optional("ΓΜ͝ɺόφφɺΦϨϯδ") items = ["Apple", "Banana", "Orange"] formatter.locale = Locale(identifier: "en_US") print(formatter.string(from: items)) // Optional("Apple, Banana, and Orange")

Slide 111

Slide 111 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. Ϧετ -JTUT 111 let formatter = ListFormatter() var items = ["೔ຊޠ", "ӳޠ", "εϖΠϯޠ"] formatter.locale = Locale(identifier: "ja_JP") print(formatter.string(from: items)) // Optional("೔ຊޠɺӳޠɺεϖΠϯޠ") formatter.locale = Locale(identifier: "es_ES") items = ["Japonés", "Inglés", "Español"] print(formatter.string(from: items)) // Optional("Japonés, Inglés y Español") items = ["Japonés", "Español", "Inglés"] print(formatter.string(from: items)) // Optional("Japonés, Español e Inglés")

Slide 112

Slide 112 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. Ϧετ -JTUT 112 // ஋ஈҰཡ let items = [120, 250, 370, 490, 610, 730, 860, 980, 1100] let itemFormatter = NumberFormatter() itemFormatter.numberStyle = .currency let formatter = ListFormatter() formatter.itemFormatter = itemFormatter print(formatter.string(from: items)) // Optional("¥120ɺ¥250ɺ¥370ɺ¥490ɺ¥610ɺ¥730ɺ¥860ɺ¥980ɺ¥1,100")

Slide 113

Slide 113 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ·ͱΊ $POUFOUT w ͳͥ'PSNBUUFSΛ࢖ͬͨ΄͏͕Α͍ͷ͔ w ࣗ෼ͰॲཧΛ࣮૷͢Δඞཁ͕ͳ͘ͳΔ w ޻਺Λ୹ॖͰ͖Δɾߟྀ࿙ΕΛ๷͛Δ w ϩʔΧϥΠζڧྗͳαϙʔτ w J04Ͱ௥Ճ͞Εͨ৽ػೳ w GPSNBUUFE ɺ'PSNBU4UZMFͰ୹͘ॻ͘͜ͱ͕Ͱ͖Δ w ඪ४Ͱ༻ҙ͞Ε͍ͯΔ'PSNBUUFSͷ͢΂ͯͷ࢖༻ྫ w 'PSNBUUFSͷଘࡏ͚ͩͰ΋஌ͬͯ΄͍͠ 113

Slide 114

Slide 114 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ࢀߟจݙ 3FGFSFODFT"DLOPXMFEHFNFOUT w 'PSNBUUFSTσʔλΛώϡʔϚϯϑϨϯυϦʔʹɹ"QQMF88%$ 
 IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w ͋ͳͨͷ஌Βͳ͍࿈བྷઌͷੈքCZ!DP ff FFHZVOZVɹJ04%$+BQBO 
 IUUQTGPSUFFKQJPTEDKBQBOQSPQPTBMBDGBDFFEBBDDCECGB w ʲ4XJGUʳ೔࣌ɺ਺ɺ௨՟ɺσʔλαΠζɺϦετɺਓͷ໊લɺ୯Ґ෇͖ͷ਺͔Β4USJOH΁ͷϑΥʔϚο τ͸ࣗ෼Ͱ࣮૷͠ͳ͍ͰCZ!USFBTUSBJOɹ2JJUBJ04"EWFOU$BMFOEBS 
 IUUQTRJJUBDPNUSFBTUSBJOJUFNTFFDFGGBBE w 4USFBNMJOFZPVSMPDBMJ[FETUSJOHTɹ"QQMF88%$ 
 IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 114

Slide 115

Slide 115 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. 115 J1IPOFͷྐྵ๏Λʮ࿨ྐྵʯʹ͢Δͱ࠶ݱͰ͖·͢

Slide 116

Slide 116 text

Copyright © 2021 treastrain / Tanaka RyogaɹAll rights reserved. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂɹɹɹɹɹɹɹɹɹIUUQTUSFUKQɹ⏩ ͋ΒΏΔ৘ใΛ 
 ָʹਖ਼͘͠4USJOHʹϑΥʔϚοτ͢Δ ʙྩ࿨೥͔Β୤٫ͤΑʙ 116 iOSDC Japan 2021 
 Day 2 #iosdc #d