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

Mobile Programming Protocol Extension

Mobile Programming Protocol Extension

MobileProgrammingの授業で使うスライドです!

yuichiro_takahashi

January 29, 2019
Tweet

More Decks by yuichiro_takahashi

Other Decks in Technology

Transcript

  1. PROTOCOL EXTENSION
    MOBILE PROGRAMMING JAN 30TH

    View Slide

  2. 1. EXTENSION

    View Slide

  3. ςΩετ
    EXTENSION?
    ▸ ೚ҙͷClass΍Struct, ProtocolΛจࣈ௨Γ֦ுͰ͖Δݴޠػೳͷࣄ
    ▸ ࣗ෼͕ఆٛͨ͠Class͚ͩͰͳ͘ɺ͢Ͱʹఆٛ͞Ε͍ͯΔClassͳ
    Ͳ΋֦ு͢Δ͜ͱ͕Մೳ(UIViewControllerͱ͔)
    ▸ ͜͜Ͱݴ͏֦ுͱ͸ϝιου΍ϓϩύςΟͷ௥Ճ, Protocolͷ࠾༻
    Λࢦ͢
    ▸ ඇৗʹศརͳػೳͰ͸͋Δ͕અ౓ΛकΒͳ͍֦ு͸ࠇຐज़ͱݺ͹
    ΕڪΕΒΕ͍ͯΔ

    View Slide

  4. ςΩετ
    EXTENSION(จ๏)
    extension String {
    }
    Ωʔϫʔυ extension ʹଓ͚ͯ ֦ு͍ͨ͠Class໊Λऔಘ

    View Slide

  5. ςΩετ
    EXTENSION(จ๏)
    extension String {
    var length: Int { return self.count }
    }
    Ωʔϫʔυ extension ʹଓ͚ͯ ֦ு͍ͨ͠Class໊Λࢦఆ
    PropertyΛ௥ՃͰ͖Δ͕ Computed Property ͷΈ

    View Slide

  6. ςΩετ
    EXTENSION(จ๏)
    extension String {
    var length: Int { return self.count }
    func toInt(with defaultValue: Int) -> Int {
    return Int(self) ?? defaultValue
    }
    }
    Ωʔϫʔυ extension ʹଓ͚ͯ ֦ு͍ͨ͠Class໊Λࢦఆ
    PropertyΛ௥ՃͰ͖Δ͕ Computed Property ͷΈ
    ϝιου͸ClassͳͲͱಉ͡Α͏ʹ௥ՃՄೳ

    View Slide

  7. ςΩετ
    EXTENSION(จ๏)
    extension String {
    var length: Int { return self.count }
    func toInt(with defaultValue: Int) -> Int {
    return Int(self) ?? defaultValue
    }
    init(date: Date, format: String) {
    // ௕͘ͳΔͷͰׂѪ
    }
    }
    Ωʔϫʔυ extension ʹଓ͚ͯ ֦ு͍ͨ͠Class໊Λࢦఆ
    PropertyΛ௥ՃͰ͖Δ͕ Computed Property ͷΈ
    ϝιου͸ClassͳͲͱಉ͡Α͏ʹ௥ՃՄೳ
    ΠχγϟϥΠβ΋ClassͳͲͱಉ͡Α͏ʹ௥ՃՄೳ

    View Slide

  8. ςΩετ
    EXTENSION(จ๏ͦͷ̎)
    extension UIViewController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
    return 0
    }
    // ௕͘ͳΔͷͰׂѪ
    }
    Class໊ʹଓ͚ͯProtocol໊Λࢦఆ

    View Slide

  9. 2. PROTOCOL
    EXTENSION

    View Slide

  10. ςΩετ
    PROTOCOL EXTENSION?
    ▸ ઌ΄Ͳ࿩ͨ͠ExtensionΛ࢖ͬͯ ProtocolΛ֦ு͢Δࣄ
    ▸ Protocol͸ඇৗʹศརͳػೳͰ͋Δ͕ఆٛ͞ΕͨϝιουΛ
    ࠾༻͢Δͨͼʹ࣮૷͠ͳͯ͘͸͍͚ͳ͍ख͕ؒ͋Δ
    ▸ Protocol ExtensionΛ࢖ͬͯProtocolʹσϑΥϧτͷ࣮૷Λ
    ࣋ͨͤͯखؒΛܰݮ͢Δ͜ͱ͕Ͱ͖Δ

    View Slide

  11. ςΩετ
    PROTOCOL EXTENSION(จ๏, ఆٛ)
    protocol DismissDelegate {}
    ·ͣ͸ProtocolΛఆٛ͢Δ͕֦ு͍ͨ͠ϝιου͸ͬͪ͜ʹ͸ॻ͔ͳ͍

    View Slide

  12. ςΩετ
    PROTOCOL EXTENSION(จ๏, ఆٛ)
    protocol DismissDelegate {}
    extension DismissDelegate {
    }
    ·ͣ͸ProtocolΛఆٛ͢Δ͕֦ு͍ͨ͠ϝιου͸ͬͪ͜ʹ͸ॻ͔ͳ͍
    extension Ωʔϫʔυʹଓ͚ͯProtocol໊Λࢦఆ

    View Slide

  13. ςΩετ
    PROTOCOL EXTENSION(จ๏, ఆٛ)
    protocol DismissDelegate {}
    extension DismissDelegate {
    func dismiss(vc: UIViewController) {
    vc.dismiss(animated: true, completion: nil)
    }
    }
    ·ͣ͸ProtocolΛఆٛ͢Δ͕֦ு͍ͨ͠ϝιου͸ͬͪ͜ʹ͸ॻ͔ͳ͍
    extension Ωʔϫʔυʹଓ͚ͯProtocol໊Λࢦఆ
    ֦ு͍ͨ͠ϝιουΛ࣮૷

    View Slide

  14. ςΩετ
    PROTOCOL EXTENSION(จ๏, ࠾༻ଆ)
    class ViewController: UIViewController {
    }
    extension ViewController: DismissDelegate {}
    ֦ுͨ͠ProtocolΛ࠾༻ͤ͞Δ͕࣮૷Λॻ͘ඞཁ͕ແ͍ʂʂ

    View Slide

  15. ςΩετ
    PROTOCOL EXTENSION(จ๏, ࠾༻ଆ)
    class ViewController: UIViewController {
    @IBAction func dismissAction(_ sender: UIButton) {
    dismiss(vc: self)
    }
    }
    extension ViewController: DismissDelegate {}
    ֦ுͨ͠ProtocolΛ࠾༻ͤ͞Δ͕࣮૷Λॻ͘ඞཁ͕ແ͍ʂʂ
    DismissDelegateͷextensionͷ࣮૷͕ݺ͹ΕΔ

    View Slide