MobileProgrammingの授業で使うスライドです!
PROTOCOL EXTENSIONMOBILE PROGRAMMING JAN 30TH
View Slide
1. EXTENSION
ςΩετEXTENSION?▸ ҙͷClassStruct, ProtocolΛจࣈ௨Γ֦ுͰ͖Δݴޠػೳͷࣄ▸ ͕ࣗఆٛͨ͠Class͚ͩͰͳ͘ɺ͢Ͱʹఆٛ͞Ε͍ͯΔClassͳͲ֦ு͢Δ͜ͱ͕Մೳ(UIViewControllerͱ͔)▸ ͜͜Ͱݴ͏֦ுͱϝιουϓϩύςΟͷՃ, Protocolͷ࠾༻Λࢦ͢▸ ඇৗʹศརͳػೳͰ͋Δ͕અΛकΒͳ͍֦ுࠇຐज़ͱݺΕڪΕΒΕ͍ͯΔ
ςΩετEXTENSION(จ๏)extension String {}Ωʔϫʔυ extension ʹଓ͚ͯ ֦ு͍ͨ͠Class໊Λऔಘ
ςΩετEXTENSION(จ๏)extension String {var length: Int { return self.count }}Ωʔϫʔυ extension ʹଓ͚ͯ ֦ு͍ͨ͠Class໊ΛࢦఆPropertyΛՃͰ͖Δ͕ Computed Property ͷΈ
ςΩετ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ͳͲͱಉ͡Α͏ʹՃՄೳ
ςΩετ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ͳͲͱಉ͡Α͏ʹՃՄೳ
ςΩετEXTENSION(จ๏ͦͷ̎)extension UIViewController: UITableViewDataSource {func numberOfSections(in tableView: UITableView) -> Int {return 0}// ͘ͳΔͷͰׂѪ}Class໊ʹଓ͚ͯProtocol໊Λࢦఆ
2. PROTOCOLEXTENSION
ςΩετPROTOCOL EXTENSION?▸ ઌ΄Ͳͨ͠ExtensionΛͬͯ ProtocolΛ֦ு͢Δࣄ▸ ProtocolඇৗʹศརͳػೳͰ͋Δ͕ఆٛ͞ΕͨϝιουΛ࠾༻͢Δͨͼʹ࣮͠ͳ͍͚ͯ͘ͳ͍ख͕ؒ͋Δ▸ Protocol ExtensionΛͬͯProtocolʹσϑΥϧτͷ࣮Λ࣋ͨͤͯखؒΛܰݮ͢Δ͜ͱ͕Ͱ͖Δ▸
ςΩετPROTOCOL EXTENSION(จ๏, ఆٛ)protocol DismissDelegate {}·ͣProtocolΛఆٛ͢Δ͕֦ு͍ͨ͠ϝιουͬͪ͜ʹॻ͔ͳ͍
ςΩετPROTOCOL EXTENSION(จ๏, ఆٛ)protocol DismissDelegate {}extension DismissDelegate {}·ͣProtocolΛఆٛ͢Δ͕֦ு͍ͨ͠ϝιουͬͪ͜ʹॻ͔ͳ͍extension Ωʔϫʔυʹଓ͚ͯProtocol໊Λࢦఆ
ςΩετPROTOCOL EXTENSION(จ๏, ఆٛ)protocol DismissDelegate {}extension DismissDelegate {func dismiss(vc: UIViewController) {vc.dismiss(animated: true, completion: nil)}}·ͣProtocolΛఆٛ͢Δ͕֦ு͍ͨ͠ϝιουͬͪ͜ʹॻ͔ͳ͍extension Ωʔϫʔυʹଓ͚ͯProtocol໊Λࢦఆ֦ு͍ͨ͠ϝιουΛ࣮
ςΩετPROTOCOL EXTENSION(จ๏, ࠾༻ଆ)class ViewController: UIViewController {}extension ViewController: DismissDelegate {}֦ுͨ͠ProtocolΛ࠾༻ͤ͞Δ͕࣮Λॻ͘ඞཁ͕ແ͍ʂʂ
ςΩετPROTOCOL EXTENSION(จ๏, ࠾༻ଆ)class ViewController: UIViewController {@IBAction func dismissAction(_ sender: UIButton) {dismiss(vc: self)}}extension ViewController: DismissDelegate {}֦ுͨ͠ProtocolΛ࠾༻ͤ͞Δ͕࣮Λॻ͘ඞཁ͕ແ͍ʂʂDismissDelegateͷextensionͷ࣮͕ݺΕΔ