Slide 1

Slide 1 text

SwiftyMath Ͱ༡Ϳ ʢXcode + SwiftPMʣ USAMI Kosuke

Slide 2

Slide 2 text

ࣗݾ঺հ • Ӊࠤݟެีʢ@usamik26ʣ • ϑΣϯϦϧגࣜձࣾ • iOS ΞϓϦ։ൃ • ೔༵਺ֶऀ • དྷ݄ɺ೔༵਺ֶձɺؔ੢͢͏͕͘ెͷͭͲ͍Ͱߨԋ༧ఆ

Slide 3

Slide 3 text

SwiftyMath ͱ͸ • SwiftyMath : Pure Math in Pure Swift. • ϓϩάϥϚ͕਺ֶΛֶͿͳΒɺίʔυΛ࢖ֶͬͯͿͷ͕ྑ͍

Slide 4

Slide 4 text

Φεεϝͷߨԋ • SwiftyMath ͰֶͿ਺ֶʢந৅୅਺ֶʣ (iOSDC 2019) • SwiftyMath Λ࡞ΒΕͨɺ͞ͷ͚ͨͱ͞Μͷߨԋ • ෼͔Γ΍͍͢ͷͰɺ਺ֶΛ͋·Γ஌Βͳ͍ਓʹ΋Φεεϝ • ݟͳ͕Β࣮ࡍʹίʔυΛॻ͘ͱྑ͍

Slide 5

Slide 5 text

۩ମྫ

Slide 6

Slide 6 text

SwiftyMath ͷ۩ମྫ (1) import SwiftyMath let a = RationalNumber(4, 5) // 4/5 let b = RationalNumber(3, 2) // 3/2 a + b // 23/10 a * b // 6/5 b / a // 15/8

Slide 7

Slide 7 text

SwiftyMath ͷ۩ମྫ (2) typealias P = Polynomial< > let f = P(0, 2, -3, 1) // x^3 − 3x^2 + 2x let g = P(6, -5, 1) // x^2 − 5x + 6 f + g // x^3 - 2x^2 - 3x + 6 f * g // x^5 - 8x^4 + 23x^3 - 28x^2 + 12x f % g // 6x - 12 gcd(f, g) // ࠷େެ໿਺ 6x - 12

Slide 8

Slide 8 text

SwiftyMath ͷ۩ମྫ (3) typealias M = SquareMatrix<_2, > // 2×2 ߦྻ let a = M(1, 2, 3, 4) // [1, 2; 3, 4] let b = M(2, 1, 1, 2) // [2, 1; 1, 2] a + b // [3, 3; 4, 6] a * b // [4, 5; 10, 11] a + b == b + a // true: ଍͠ࢉ͸ॱ൪Λม͑ͯ΋౴͑͸ಉ͡ a * b == b * a // false: ͔͚ࢉ͸ॱ൪Λม͑Δͱ౴͕͑ҟͳΔ

Slide 9

Slide 9 text

ߦྻͷαΠζͷ໰୊ • ߦྻΛ Swift Ͱ࣮૷͢Δ : Ҏલʹ๻͕΍࣮ͬͨ૷ • ߦྻͷαΠζΛϓϩύςΟʹ͍࣋ͬͯΔͷ͕ෆຬͩͬͨ struct Matrix { let rows: Int // ߦͷ਺ let columns: Int // ྻͷ਺ ... }

Slide 10

Slide 10 text

Կ͕ෆຬͳͷ͔ • ࣮ߦ࣌ʹαΠζΛνΣοΫͯ͠Τϥʔʹ͢Δ͜ͱʹͳΔ • Ϗϧυ࣌ʹνΣοΫ͍ͨ͠ΑͶʁ ܕͰ൑ఆ͍ͨ͠ΑͶʁ static func + (lhs: Matrix, rhs: Matrix) -> Matrix { assert(lhs.rows == rhs.rows && lhs.columns == rhs.columns, "αΠζ͕Ұக͍ͯ͠ͳ͍ͱ଍͠ࢉͰ͖ͳ͍") ... }

Slide 11

Slide 11 text

δΣωϦΫεͰղܾͰ͖Δɾɾɾʁ • δΣωϦΫεͷύϥϝʔλʹ౉ͤΔͷ͸ܕ͚ͩɺ஋͸౉ͤͳ͍ // ϏϧυΤϥʔʂ 2ͱ͍͏੔਺஋͸౉ͤͳ͍ struct Matrix2D : Matrix<2, > { ... }

Slide 12

Slide 12 text

SwiftyMath ͷղܾࡦ • ੔਺஋ʹରԠ͢ΔܕΛ࡞Δ protocol SizeType { static var intValue: Int { get } } struct _2 : SizeType { static let intValue = 2 } struct Matrix2D : Matrix<_2, > { ... }

Slide 13

Slide 13 text

Ͳ͏΍ͬͯࢼ͔͢

Slide 14

Slide 14 text

SwiftyMath ΛͲ͏΍ͬͯࢼ͔͢ • SwiftyMath ͸ SwiftPM (Swift Package Manager) ϕʔεͷύοέʔδ • ͜ΕΛ Xcode Ͱָʹ࢖͏ʹ͸Ͳ͏ͨ͠Β͍͍͔

Slide 15

Slide 15 text

Xcode 11 + SwiftPM • ࣮͸ Xcode 11 Ͱศརʹͳͬͨ

Slide 16

Slide 16 text

Ҏલͷ SwiftPM • ίϚϯυ swift package generate-xcodeproj • Xcode ϓϩδΣΫτΛੜ੒ • ͦΕΛ Xcode Ͱ։͘

Slide 17

Slide 17 text

Xcode 11 Ͱ SwiftPM Λ։͘ • Xcode ͔Β SwiftPM ϑΥϧμΛ௚઀։͘͜ͱ͕Ͱ͖Δ • Package.swift ϑΝΠϧ·ͨ͸ϑΥϧμΛબͿ • ࣗಈతʹɺઐ༻ͷ Xcode ϫʔΫεϖʔε͕ੜ੒͞ΕΔ • .swiftpm ϑΥϧμҎԼʹੜ੒͞ΕΔ

Slide 18

Slide 18 text

SwiftyMath Λ։͘ • ࣮ࡍʹ Xcode ͔Β SwiftyMath Λ։͍ͯΈΔ • ͢Ͱʹ Sample ͕༻ҙ͞Ε͍ͯΔͷͰ؆୯ʹ࣮ߦͰ͖Δ

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

ͦΕҎ֎ͷํ๏

Slide 21

Slide 21 text

Playground • ΋ͬͱ΋͓खܰͳํ๏͸ɺSources ϑΥϧμʹϥΠϒϥϦͷ ιʔεΛؙ͝ͱೖΕΔ • ͜Ε͸ Xcode 11 Ͱͳ͘ͱ΋ैདྷ͔Β࢖͑Δ • ϥΠϒϥϦͷόʔδϣϯ؅ཧͳͲ͕ෆཁͳΒ͜ΕͰे෼ • iPad ͷ Swift Playground Ͱ΋͜ͷํ๏Ͱ OK

Slide 22

Slide 22 text

Xcode 11 + Swift Package • Xcode ϓϩδΣΫτʹରͯ͠ Swift Package Λ௥ՃͰ͖Δ • Xcode 11 Ͱ File - Swift Packages - Add Package Dependency • ΋ͪΖΜ SwiftyMath ΋ Xcode ϓϩδΣΫτʹ૊ΈࠐΊΔ

Slide 23

Slide 23 text

·ͱΊ • SwiftyMath ͸ϓϩάϥϚ͕਺ֶΛֶͿखஈͱͯ͠Φεεϝ • iOSDC ͷߨԋΛݟͳ͕ΒίʔυΛॻ͘ͱྑ͍ • ࢼ͢खஈ • Xcode 11 Λ࢖͏ʢSwiftPM ͱͷ࿈ܞʣ • Playground Λ࢖͏