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

大で小を兼ねるな

takasek
September 28, 2016

 大で小を兼ねるな

potatotips #33 (iOS/Android開発Tips共有会)
http://potatotips.connpass.com/event/38557/
の発表資料です。

takasek

September 28, 2016
Tweet

More Decks by takasek

Other Decks in Programming

Transcript

  1. େͰখΛ݉ͶΔͳ
    by takasek
    2016/9/28 potatotips 33
    1

    View Slide

  2. 2

    View Slide

  3. 3

    View Slide

  4. օ͞Μ͸
    ೔෇Λ؅ཧ͢Δͱ͖ɺ
    ͲͷܕΛ࢖͍·͔͢ʁ
    4

    View Slide

  5. NSDate?
    5

    View Slide

  6. ΋ͱ͍
    Date?
    6

    View Slide

  7. ͋ͳͨͷΞϓϦͷ
    ೔෇࢓༷
    4 Ұ೔͸24࣌ؒ
    7

    View Slide

  8. ͋ͳͨͷΞϓϦͷ
    ೔෇࢓༷
    4 Ұ೔͸24࣌ؒ
    4 ೔෇͕มΘΔͷ͸ɺே8࣌
    8

    View Slide

  9. ͋ͳͨͷΞϓϦͷ
    ೔෇࢓༷
    4 Ұ೔͸24࣌ؒ
    4 ೔෇͕มΘΔͷ͸ɺே8࣌
    ɹ
    ※͜ͷ೔෇Λɺ
    ɹ௨ৗͷ೔෇ͱ۠ผ͢ΔͨΊʹɺ
    ɹShachikuDate ͱݺͼ·͢
    9

    View Slide

  10. ShachikuDateͷจࣈྻදݱΛಘΔ
    func shachikuDateDescription
    (_ !: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy೥MM݄dd೔"
    return formatter.string(from: !)
    }
    10

    View Slide

  11. ShachikuDateΛ࢖͍͍ͨ
    let ! = parseDate("2016-09-28 07:59:58")
    //"8࣌લͳͷͰɺ
    shachikuDateDescription(!)
    //2016೥09݄27೔ #ͱද͍ࣔͨ͠
    11

    View Slide

  12. ͜Μͳ;͏ʹม׵͢Δʁ
    extension Date {
    var shachikuDate: Date {
    if self.hour < 8 { //8࣌લͳΒ
    return (self.day - 1) //ࡢ೔ʹ͢Δ
    } else {
    return self
    }
    }
    }
    ※ͪΐͬͱٖࣅίʔυ
    12

    View Slide

  13. ໰୊ᶃ
    let !1 = parseDate("2016-09-27 08:00:00")
    let !2 = parseDate("2016-09-28 07:59:58")
    !1.shachikuDate < !2.shachikuDate
    ౰વtrueΛظ଴͠·͢ΑͶʁɹͰ΋…
    13

    View Slide

  14. ໰୊ᶃ
    let !1 = parseDate("2016-09-27 08:00:00")
    let !2 = parseDate("2016-09-28 07:59:58")
    !1.shachikuDate < !2.shachikuDate
    // false"
    14

    View Slide

  15. ໰୊ᶃ
    ͳͥͳΒ
    let !1 = parseDate("2016-09-27 08:00:00")
    let !2 = parseDate("2016-09-28 07:59:58")
    !1.shachikuDate
    // "2016-09-27 08:00:00" "มԽͯ͠ͳ͍
    !2.shachikuDate
    // "2016-09-27 07:59:58" "Ұ೔ḪͬͯΔ
    15

    View Slide

  16. ໰୊ᶄ
    func printHoge(with !: Date) {
    printFuga(!.shachikuDate)
    }
    func printFuga(with !: Date) {
    print(!.shachikuDate)
    }
    let ! = parseDate("2016-09-28 07:59:58")
    printHoge(with: !)
    // "2016೥09݄26೔"
    ࡢ೔(9/27)ͷ೔෇Λظ଴͍ͯ͠Δͷʹɺ
    Ұࡢ೔(9/26)ʹͳ͍ͬͯΔ…
    16

    View Slide

  17. ໰୊ᶄ
    func printHoge(with !: Date) {
    printFuga(!.shachikuDate)
    }
    func printFuga(with !: Date) {
    print(!.shachikuDate)
    }
    ɹ
    Α͘ಡΉͱɺ
    1. printHoge(with:) Ͱલ೔ͷDateʹม׵
    2. printHoge(with:) ͔Β printFuga(with:) ΛݺͿ
    4 printFuga(with:) Ͱߋʹલ೔ͷDateʹม׵
    17

    View Slide

  18. !"#$%!"$%
    όάʹؾ෇͚Δ
    ؾ͕͠ͳ͍…
    %$"!%$#"!
    18

    View Slide

  19. ໰୊ᶅ
    Ϣʔβʔೖྗ஋ΛɺαʔόʹૹΔ
    func didReceiveUserInput
    (year: Int, month: Int, day: Int) {
    let ! = Date(
    calendar: Caldendar.default,
    year: year,
    month: month,
    day: day
    )
    API.send(!)
    }
    19

    View Slide

  20. !ʮͳ͋ʯ
    20

    View Slide

  21. !ʮDBʹ
    4004೥ͱ͔
    ೖͬͯΔΜ͚ͩͲʯ
    21

    View Slide

  22. !?
    22

    View Slide

  23. func didReceiveUserInput
    (year: Int, month: Int, day: Int) {
    let ! = Date(
    calendar: Caldendar.default,
    year: year,
    month: month,
    day: day
    )
    API.send(!)
    }
    ɹ
    !
    Ͳ͜ʹ໰୊͕…!?
    23

    View Slide

  24. func didReceiveUserInput
    (year: Int, month: Int, day: Int) {
    let ! = Date(
    calendar: Caldendar.default,
    //"࣮͸࿨ྐྵઃఆ#ͯͨ͠!!!
    year: year, //$2016
    month: month,
    day: day
    )
    API.send(!)
    }
    ࿨ྐྵઃఆͳͷͰ ! = ฏ੒2016೥
    = 1988 + 2016
    = ੢ྐྵ4004೥ ͱ͍͏Φν
    24

    View Slide

  25. ॾѱͷࠜݯ
    Dateͱ͍͏ܕΛ
    ࢖͍ճ͍ͯ͠Δ
    25

    View Slide

  26. Dateܕ͸ศར
    26

    View Slide

  27. λΠϜκʔϯͷҧ͍΋
    ྐྵ๏ͷҧ͍΋
    શ෦ٵऩͯ͘͠ΕΔ
    27

    View Slide

  28. Ͱ΋
    ࣌ࠁͷࡉ੍͔͍ޚͬͯ
    ࠓɺඞཁʁ
    28

    View Slide

  29. ࠓɺྐྵ๏ͬͯඞཁʁ
    29

    View Slide

  30. ShachikuDate͕΄͍͠ͷ͸
    ೔෇!
    ͚ͩ
    30

    View Slide

  31. ͳΒɺ
    struct YMD {
    let year: Int
    let month: Int
    let day: Int
    var description: String {
    return "\(year)೥\(month)݄\(day)೔"
    }
    }
    let ! = YMD(year: 2016, month: 9, day: 28)
    31

    View Slide

  32. γϯ
    ϓϧ
    32

    View Slide

  33. όάͷೖΓࠐΈΑ͏͕ͳ͍
    33

    View Slide

  34. !✨
    34

    View Slide

  35. ಉ͜͡ͱ͸
    ΤϯδχΞϦϯάͷ
    ༷ʑͳঢ়گͰ
    ݴ͑ͯɺ
    35

    View Slide

  36. ྫ1
    ☑ จষΛද͍ࣔͨ͠
    ☑ Ұఆͷߴ͞Λ௒͑ͨΒεΫϩʔϧ͍ͤͨ͞
    !
    ͩͬͨΒUITextViewͰ͠ΐ͏
    36

    View Slide

  37. ݁Ռ1
    !
    จষྖҬͷϚʔδϯͷ੍ޚͭΒ͍…
    จষྖҬͷheight͕͏·͘औΕͳ͍…
    …ਏ͍…
    37

    View Slide

  38. !NSLayoutManager
    !NSTextStorage
    !NSTextContainer
    !etc...
    38

    View Slide

  39. UITextViewͷ
    ಺෦ߏ଄͸
    ҙ֎ͱຐڥ
    39

    View Slide

  40. εΫϩʔϧͰ͖ΔLabel͕
    ཉ͍͚ͩ͠ͳΒɺ
    UITextView͸
    ΦʔόʔεϖοΫ
    40

    View Slide

  41. ݁ہ1
    !
    UILabel Λ UIScrollView ʹೖΕΔ࣮૷Ͱ
    ͘͢͝γϯϓϧʹղܾͰ͖ͨ…
    ʢίʔυ1ߦ΋ॻ͔ͣɺ
    ɹInterfaceBuilderͰ׬݁Ͱ͖ΔϨϕϧʣ
    41

    View Slide

  42. ྫ2
    !
    ○○ػೳΛ࢖͍͍ͨͷͰ
    ͋ͷϥΠϒϥϦೖΕΑ͏ͬͱʂ
    42

    View Slide

  43. ݁Ռ2
    !
    ͋ͷϥΠϒϥϦͷ××ػೳʢผʹཁΒͳ͍ʣ
    ͕
    ґଘ͢ΔผͷϥΠϒϥϦͷ͍ͤͰ
    Xcode8ରԠ͕ਐ·ͳ͍…
    !
    Ͱ΋୤ϥΠϒϥϦ͸
    ࠓߋແཧ…
    43

    View Slide

  44. ͓Θ͔ΓͩΖ͏͔
    ػೳ͕ଟ͍
    ʹ
    ᠘͕ଟ͍
    44

    View Slide

  45. େ͕খΛ݉ͶΔͱ
    ൵͠Έ͕ੜ·ΕΔ
    45

    View Slide

  46. ͱ͍͏Θ͚Ͱ
    46

    View Slide

  47. େࣄͳ͜ͱͳͷͰ
    ΋͏Ұ౓ݴ͍·͢
    47

    View Slide

  48. େͰ
    খΛ
    ݉ͶΔͳ
    48

    View Slide

  49. ɹҎ্ɻ
    49

    View Slide

  50. see also:
    UNIX఩ֶ - Wikipedia
    50

    View Slide