Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ざっくりわかるSwift

 ざっくりわかるSwift

Shigure Shimotori

July 19, 2017
Tweet

More Decks by Shigure Shimotori

Other Decks in Programming

Transcript

  1. ͬ͘͟ΓΘ͔ΔSwift
    TokyoTech LT #2 @S_Shimotori

    View Slide

  2. ୭ʁ
    • @S_Shimotori (@S_Shimotori_pub)
    • ৘ऑΤֶܥM2
    • DroidKaigiӡӦελοϑ
    • Swift΍PythonΛॻ͍͓ͯۚΛ໯͏͓࢓ࣄ

    View Slide

  3. DroidKaigi2018
    ։࠵ܾఆʂ
    2018೥2݄8-9೔@ϕϧαʔϧ৽॓άϥϯυ
    https://droidkaigi.github.io/2018/

    View Slide

  4. AndroidͱiOSͷ؀ڥͷҧ͍
    • Android
    • ॳճ͚ͩొ࿥ྉΛ෷͑͹OK
    • ೔ຊAndroidͷձ͕͋Δɺֶੜ෦΋͋Δ
    • ࠓKotlin͕೤͍ʂ
    • iOS
    • ຖ೥͓෍ࢪ͕ඞཁ
    • ͦΜͳձ͚͋ͬͨͬ
    • ·ͨSwift4ʹॻ͖׵͑Δ࡞ۀ͕͸͡·Δ͓…

    View Slide

  5. ϞόΠϧͷ࿩͸Ҏ্ʂ

    View Slide

  6. ຊ୊

    View Slide

  7. ͓඼ॻ͖
    • Swiftͷจ๏ͷ֓ཁ
    • Swift͕࢖͑Δ৔ॴ
    • CϥΠϒϥϦͷݺͼग़͠
    • Swiftʹ͍ͭͯ΋ͬͱ஌Γ͍ͨͱ͖͸

    View Slide

  8. ͓඼ॻ͖
    • Swiftͷจ๏ͷ֓ཁ
    • Swift͕࢖͑Δ৔ॴ
    • CϥΠϒϥϦͷݺͼग़͠
    • Swiftʹ͍ͭͯ΋ͬͱ஌Γ͍ͨͱ͖͸

    View Slide

  9. Swiftͷจ๏ͷ֓ཁ

    View Slide

  10. ཁ໿͢Δͱ͜Μͳ͔Μ͡ʂ
    • ϓϩτίϧࢦ޲ / ΦϒδΣΫτࢦ޲ /

    ؔ਺ܕ / ໋ྩܕ / ϒϩοΫߏ଄
    • ڧ͍੩తܕ෇͚ / ܕਪ࿦
    • Objective-C౳͔ΒͷӨڹ͋Γ
    • Swift4Ӷҙ੡࡞த
    • ܕ҆શnull҆શɻૉ੖Β͍͠ɻ
    • LLVMͱ͔ͳΜͱ͔
    https://en.wikipedia.org/wiki/Swift_(programming_language)

    View Slide

  11. ϓϩτίϧࢦ޲ʁ

    View Slide

  12. Swiftyʹॻ্͘Ͱ೺Ѳ͓͖͍ͯͨ͜͠ͱ
    • Swiftʹ͸classͷଞʹstructɺenumɺprotocolΛ࣋ͭ
    • protocol͸”ಛఆͷॲཧͷͨΊͷϝιουͷઃܭਤ”
    • JavaͰ͍͏ͱ͜Ζͷinterface
    • ͭ·Γ࢖Θͳͯ͘΋ಈ͔ͳ͍͜ͱ͸ͳ͍
    • Swift3ඪ४ϥΠϒϥϦͷ201γϯϘϧͷ͏ͪɺ

    struct͸140ݸɺenum͸12ݸɺprotocol͸48ݸɺ

    class͸ͳΜͱ1ݸʂ

    View Slide

  13. Java ComparableͱSwift Comparable
    • Java Comparable
    • Swift Comparable
    μΠϚ http://qiita.com/S_Shimotori/items/83e22d83f5c0096a6d5b
    http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/Comparable.java
    https://github.com/apple/swift/blob/c15c671372620b543e19a662218a247f601628e4/stdlib/public/core/Comparable.swift
    ※ ࣮ࡍ͸Equatableͷ “=” ͱComparableͷ ”<“ Λ࣮૷͢Ε͹଍ΓΔ

    View Slide

  14. OptionalͱCommandLine
    • Optional͸enum Optional
    • .some(Wrapped)ͱ.noneΛྻڍ
    • Nullableͷਖ਼ମ
    • enum CommandLine͸ྻڍͯ͠ͳ͍
    • ྻڍܕࣗ਎͕ΠχγϟϥΠζ͞Εͳ͍ಛੑΛར༻
    https://github.com/apple/swift/blob/master/stdlib/public/core/CommandLine.swift
    https://github.com/apple/swift/blob/master/stdlib/public/core/Optional.swift

    Optionalͷ౶ҥߏจ

    View Slide

  15. ͪͳΈʹ: ԋࢉࢠΛఆٛ͢Δ
    • Swift͸ࣗ෼ͰԋࢉࢠΛఆٛ͢Δ͜ͱ͕Մೳ
    • ओʹؔ਺ܕ͍ͨ͠ਓ͕࡞Δ “>=“
    • ࢖͑Δه߸͸ແ೉ͦ͏ͳ΍ͭ
    • / = - + ! * % < > & | ^ ~ ?ͱ͔ଞ͍Ζ͍Ζ
    • ͑ʁ$͕ͩΊͳͷʹὺ͕࢖͑Δͷʁʁ

    View Slide

  16. ܕਪ࿦΋͋ΔΜͩͶ͐
    ͍͍ͪͪܕΛॻ͔ͳ͍͍ͯ͘Ͷʂ

    View Slide

  17. SwiftͰܕਪ࿦ͱ͍ͬͨΒ……
    • ʮίϯύΠϧ࣌ؒͷେ൒͕ܕਪ࿦͡ΌΜwʯ
    • ʮਪ࿦ʹ͔͔͔࣌ؒͬͨΒίϯύΠϧఘΊ·ͨ͠Τϥʔʯ
    • ղܾࡦ:
    • ৽͍͠όʔδϣϯͷSwift(ͱXcode9)Λ࢖͏
    • એݴ࣌ʹͪΌΜͱܕΛॻ͘
    • ؔ਺ܕͳΜͯͳ͔ͬͨɻ͍͍Ͷʁ

    View Slide

  18. ΤϥʔදݱͲ͏ͳͬͯΜͷʁ

    View Slide

  19. Swiftʹ͓͚ΔΤϥʔදݱ
    • جຊతʹ͸NonNullɺthrow΋ͳ͠
    • ੒ޭ/ࣦഊͷ2஋͸໭Γ஋NullableͰදݱ
    • Optional.some(Wrapped)ͰแΜͰฦ͢
    • Լॲཧ͠ͳ͍ͱแΜͩத਎͸࢖͑ͳ͍ʂ
    • ΑΓৄࡉͳΤϥʔදݱΛ͢ΔͳΒErrorΛ౤͛Δ
    • Τϥʔ͕ى͖ͳ͍͜ͱ͕໌Β͔ͳΒ͹”!”Ͱ௵͢

    View Slide

  20. ͓඼ॻ͖
    • Swiftͷจ๏ͷ֓ཁ
    • Swift͕࢖͑Δ৔ॴ
    • CϥΠϒϥϦͷݺͼग़͠
    • Swiftʹ͍ͭͯ΋ͬͱ஌Γ͍ͨͱ͖͸

    View Slide

  21. Swift͕࢖͑Δ৔ॴ

    View Slide

  22. ͋ʔ͸͍͸͍iOSͶ
    ڵຯͳ͍ΜͰ✋

    View Slide

  23. DarwinҎ֎Ͱ΋࢖͑Δ͔Βʂ
    ͕͢͞ʹ2.2͸ݹ͍͕

    View Slide

  24. LinuxͰSwift
    • swift.orgͷUbuntu༻όΠφϦ͔dockerΛ࢖͏ͷָ͕
    • Կ͔࡞Δ࣌͸Swift Package ManagerΛ࢖͏ͱྑ͍
    • ґଘؔ܎ղܾͨ͠Γςετͨ͠Γ͢Δ
    • ίϚϯυϥΠϯπʔϧ͕࡞ΕΔ
    • WebϑϨʔϜϫʔΫͰWebΞϓϦ͕࡞ΕΔ
    • Perfectͱ͔Vaporͱ͔ͦͷ΁Μ

    View Slide

  25. ͱ͜ΖͰ

    View Slide

  26. Swift͕Ͱ͖Δ͜ͱɺ୯඼Ͱ͸Ͱ͖ͳ͍͜ͱ
    • Swift಺ଂͷඪ४ϥΠϒϥϦ͕Ͱ͖Δ͜ͱ
    • هड़ʹඞཁͳػೳͷجຊ૚
    • Stringͱ͔printͱ͔ͦ͏͍͏ͷ
    • “import Foundation”ͰͰ͖Δ͜ͱ
    • ΞϓϦͷجຊతͳػೳʹؔΘΔૢ࡞
    • ϑΝΠϧͱ͔ηογϣϯͱ͔ͦ͏͍͏ͷ
    • Darwin༻FoundationͱLinux༻Foundation͸ผ෺
    (௚༁)

    View Slide

  27. swift-corelibs-foundationਐḿঢ়گ(7݄17೔ݱࡏ)
    https://github.com/apple/swift-corelibs-foundation/blob/master/Docs/Status.md
    “Unimplemented”

    View Slide

  28. ͓඼ॻ͖
    • Swiftͷจ๏ͷ֓ཁ
    • Swift͕࢖͑Δ৔ॴ
    • CϥΠϒϥϦͷݺͼग़͠
    • Swiftʹ͍ͭͯ΋ͬͱ஌Γ͍ͨͱ͖͸

    View Slide

  29. CϥΠϒϥϦͷݺͼग़͠
    (SPMͰͷ)
    iOS/macOS͸΋ͬͱ͔ΜͨΜɻ

    View Slide

  30. SPMͰCϥΠϒϥϦΛ࢖͏
    • ޙൃݴޠΒ͘͠ͲΜͲΜઌഐͷҨ࢈Λ࢖͍ͬͯ͘
    • Foundation͕ΞϨͳͷͰ࢖͍ݹ͞ΕͨϥΠϒϥϦͷ
    ํ͕҆৺
    • SPMͰϥοϓ͠ɺ1ͭͷύοέʔδͱͯ͠ѻ͏
    • ґଘϦετʹ͸Swiftͷ΋ͷ΋Cͷ΋ͷ΋ҰॹʹฒͿ
    • ໊લΛCHogeͱ͢Δ׳ྫ͕͋Δ
    • cURLͳΒCCurlͱ͔

    View Slide

  31. ໰୊͕ൃੜ͢Δ΍Γํ
    ΅͘ͷߟ͍͖͑ͨ͞ΐ͏ͷ41.ύοέʔδ
    ύοέʔδ" ύοέʔδ# ύοέʔδ$
    *#.4XJGU
    $$VSM
    44IJNPUPSJ
    $$VSM
    D63-
    ·Ί͖ͪ͠: IBM͸͕Μ͹ͬͯSwiftͯ͠Δɻ͍͍ͻͱɻ
    ໊લিಥ
    (ґଘݩˠґଘઌ)

    View Slide

  32. ͓඼ॻ͖
    • Swiftͷจ๏ͷ֓ཁ
    • Swift͕࢖͑Δ৔ॴ
    • CϥΠϒϥϦͷݺͼग़͠
    • Swiftʹ͍ͭͯ΋ͬͱ஌Γ͍ͨͱ͖͸

    View Slide

  33. Swiftʹ͍ͭͯ
    ΋ͬͱ஌Γ͍ͨͱ͖͸

    View Slide

  34. ͱΓ͋͑ͣॻ͖ͳ͕Β΍ͬͯΈ͍ͨʂ
    • ԦಓXcodeͰߦ͖͍ͨਓ
    • Xcode8ʹ͸ϦϑΝΫλϦϯάػೳ͕ͳ͍(স)
    • playgroundsͰؾܰʹॻ͚Δɺͨͷ͍͠
    • JetBrainsڭͷਓ
    • iOSͱҰॹʹ΍ΔͳΒAppCodeɺpure SwiftͳΒCLion
    • Vimmer
    • ͪΌΜͱߋ৽͕௥͍͍ͭͯΔͷ͸ͳ͍Μ͡Ό…
    • Emacser
    • ͪΌΜͱߋ৽͞ΕͯΔɺͣΔ͍

    View Slide

  35. ͋ͱ͸͜ͷลಡΜͰ͓͘ͱ͍͍Αɻ
    • https://developer.apple.com/library/content/documentation/Swift/
    Conceptual/Swift_Programming_Language/
    • https://developer.apple.com/documentation/swift
    • https://swift.org/

    View Slide

  36. ·ͱΊ

    View Slide

  37. Swiftͷ͕͍͜͜͢͝ʂ
    • ڧ͍੩తܕ෇͚ͰprotocolͰenumͰ͍͢͝ʂ
    • αʔό΋ίϚϯυϥΠϯπʔϧ΋࡞ΕΔʂ
    • ͦΕPythonͰΑ͘ͳ͍ʁ
    • ಈతܕ෇͚͸அͯ͡Noɺઈରʹڐ͞ͳ͍
    • ͦΕGo
    • ͦͷՄೳੑ͸͋Δ
    • ͦΕKotlin
    • ૉͰAWSLambda͍͚ΔΜͩ΋ΜͳʔͣΔ͍Αͳʔ

    View Slide