Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Protocol と Class と SubClass
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Elvis Shi
August 08, 2017
Programming
0
1.7k
Protocol と Class と SubClass
Protocol で宣言したメソッドが Class / SubClass での動き
Elvis Shi
August 08, 2017
Tweet
Share
More Decks by Elvis Shi
See All by Elvis Shi
@Environment(\.keyPath)那么好我不允许你们不知道! / atEnvironment keyPath is so good and you should know it!
lovee
0
290
ゼロから始めるPreferenceの実装 / Let's implement Preferences from scratch
lovee
0
120
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
350
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
610
How did I build an Open-Source SwiftUI Toast Library
lovee
1
150
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
1.2k
SwiftUIで二重スクロール作ってみた / When I tried to make a dual-scroll-ish view in SwiftUI
lovee
1
360
Observation のあれこれ / A brief introduction about Observation
lovee
3
420
ChatGPT 時代の勉強 / Learning under ChatGPT era
lovee
27
8.9k
Other Decks in Programming
See All in Programming
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
620
今から始めるClaude Code超入門
448jp
8
8.7k
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
170
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
560
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
200
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
280
AI時代の認知負荷との向き合い方
optfit
0
160
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
190
CSC307 Lecture 08
javiergs
PRO
0
670
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
700
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
110
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
0
81
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
180
Marketing to machines
jonoalderson
1
4.6k
Mobile First: as difficult as doing things right
swwweet
225
10k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
So, you think you're a good person
axbom
PRO
2
1.9k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
Six Lessons from altMBA
skipperchong
29
4.1k
What's in a price? How to price your products and services
michaelherold
247
13k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
180
Transcript
Protocol ͱ Class ͱ SubClass for Otemachi.swift x Kyobashi.swift #01
override init() { super.init() emplyedBy = "MAGES. 5pb. Game div"
job = "iOS Developer…?" twitter = "@lovee" qiita = "@lovee" github = "el-hoshino" additionalInfo = "Unity ਏ͍ʘ(^o^)ʗ" class Speaker: Developer { } }
খωλ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } protocol SomeProtocol { } extension SomeProtocol { func printSelf() { print("SomeProtocol") } } ≠
খωλ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { print("SomeClass") } } let sc = SomeClass() sc.printSelf() // SomeClass (sc as SomeProtocol).printSelf() // SomeClass protocol SomeProtocol { } extension SomeProtocol { func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { print("SomeClass") } } let sc = SomeClass() sc.printSelf() // SomeClass (sc as SomeProtocol).printSelf() // SomeProtocol ≠
খωλ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { print("SomeClass") } } let sc = SomeClass() sc.printSelf() // SomeClass (sc as SomeProtocol).printSelf() // SomeClass protocol SomeProtocol { } extension SomeProtocol { func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { print("SomeClass") } } let sc = SomeClass() sc.printSelf() // SomeClass (sc as SomeProtocol).printSelf() // SomeProtocol ≠ Protocol ͷ Interface (PI) એݴ PI σϑΥϧτ࣮ PI ຊ࣮ PI ݺͼग़͠ PI ݺͼग़͠ Protocol ͷ Interface (PI) એݴͳ͠ Protocol ͷ Method (PM) ࣮ Class ͷ Method (CM) ࣮ CM ݺͼग़͠ PM ݺͼग़͠
খωλ ⬆ৄ͘͠⬆ http://qiita.com/HaNoHito/items/f40bfc1717c1e922a5b0 https://speakerdeck.com/nhamada/swiftniokerumethod-dispatchnituite
খωλ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { print("SomeClass") } } let sc = SomeClass() sc.printSelf() // SomeClass (sc as SomeProtocol).printSelf() // SomeClass protocol SomeProtocol { } extension SomeProtocol { func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { print("SomeClass") } } let sc = SomeClass() sc.printSelf() // SomeClass (sc as SomeProtocol).printSelf() // SomeProtocol ≠ Protocol ͷ Interface (PI) એݴ PI σϑΥϧτ࣮ PI ຊ࣮ PI ݺͼग़͠ PI ݺͼग़͠ Protocol ͷ Interface (PI) એݴͳ͠ Protocol ͷ Method (PM) ࣮ Class ͷ Method (CM) ࣮ CM ݺͼग़͠ PM ݺͼग़͠
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { print("SomeClass") } } let sc = SomeClass() sc.printSelf() // SomeClass (sc as SomeProtocol).printSelf() // SomeClass
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { }
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) ssc.printSelf() // SomeSubClass p.printSelf() // ?
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) ssc.printSelf() // SomeSubClass p.printSelf() // ? "ग़ྗʁ AɿSomeProtocol BɿSomeClass CɿSomeSubClass
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) ssc.printSelf() // SomeSubClass p.printSelf() // SomeProtocol "ग़ྗʁ AɿSomeProtocol# BɿSomeClass$ CɿSomeSubClass$
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) p.printSelf() // SomeProtocol // == (ssc as SomeClass).printSelf() // == (ssc as SomeProtocol).printSelf() Protocol ͷ Interface (PI) એݴ PI ຊ࣮ͳ͠ʢσϑΥϧτ࣮༻ʣ PI ຊ࣮ʢσϑΥϧτ࣮ʣݺͼग़͠ PI ຊ࣮ʢσϑΥϧτ࣮ʣݺͼग़͠ Class (SomeSubClass) ͷ Method ࣮
p.printSelf()Ͱ SomeSubClass Λ ग़ྗͤ͞Δʹʁ
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) p.printSelf() // SomeProtocol // == (ssc as SomeClass).printSelf() // == (ssc as SomeProtocol).printSelf()
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) p.printSelf() // SomeProtocol // == (ssc as SomeClass).printSelf() // == (ssc as SomeProtocol).printSelf() protocol SomeProtocol { func printSelf() } extension SomeProtocol { func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) p.printSelf() // SomeProtocol // == (ssc as SomeClass).printSelf() // == (ssc as SomeProtocol).printSelf()
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) p.printSelf() // SomeProtocol // == (ssc as SomeClass).printSelf() // == (ssc as SomeProtocol).printSelf() protocol SomeProtocol { func printSelf() } extension SomeProtocol { func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { (self as SomeProtocol).printSelf() } } class SomeSubClass: SomeClass { override func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) p.printSelf() // SomeSubClass // == (ssc as SomeClass).printSelf() // == (ssc as SomeProtocol).printSelf()
ຊ protocol SomeProtocol { func printSelf() } extension SomeProtocol {
func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { } class SomeSubClass: SomeClass { func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) p.printSelf() // SomeProtocol // == (ssc as SomeClass).printSelf() // == (ssc as SomeProtocol).printSelf() protocol SomeProtocol { func printSelf() } extension SomeProtocol { func printSelf() { print("SomeProtocol") } } class SomeClass: SomeProtocol { func printSelf() { (self as SomeProtocol).printSelf() } } class SomeSubClass: SomeClass { override func printSelf() { print("SomeSubClass") } } class Parent { let someClass: SomeClass // init(someClass: SomeClass) { ... } func printSelf() { someClass.printSelf() } } let ssc = SomeSubClass() let p = Parent(someClass: ssc) p.printSelf() // SomeSubClass // == (ssc as SomeClass).printSelf() // == (ssc as SomeProtocol).printSelf() Protocol ͷ Interface (PI) એݴ PI ຊ࣮ͳ͠ʢσϑΥϧτ࣮༻ʣ Class (SomeSubClass) ͷ Method ࣮ PI ຊ࣮ʢσϑΥϧτ࣮ʣݺͼग़͠ PI ຊ࣮ʢσϑΥϧτ࣮ʣݺͼग़͠ Protocol ͷ Interface (PI) એݴ PI ຊ࣮ʢσϑΥϧτ࣮ྲྀ༻ʣ PI ຊ࣮ʢαϒΫϥεʹΑΔΦʔόʔϥΠυʣ PI ຊ࣮ʢσϑΥϧτ࣮ʣݺͼग़͠ PI ຊ࣮ʢΦʔόʔϥΠυࡁΈʣݺͼग़͠
final ͡Όͳ͍ class ɺ σϑΥϧτ࣮Λ͏߹Ͱɺ PI ͷ࣮Λলུͯ͠ͳΒͳ͍ɻ Զ ݁
⺄⇾獌K15&%ٛڋق⚸ק猳