Slide 1

Slide 1 text

iOSΞϓϦ։ൃऀ͔Βݟͨ Kotlin 2017/06/29 ୈ6ճKotlinษڧձ ˏ Sansan Koishi Koichiro Oishi, 2017/6/29 1

Slide 2

Slide 2 text

ࣗݾ঺հ େੴ ߂Ұ࿠ γεςϜɾΞφϥΠζגࣜձࣾ iOSΞϓϦ։ൃऀ ΞΧ΢ϯτؔ࿈ * @mego_ * koishi Koichiro Oishi, 2017/6/29 2

Slide 3

Slide 3 text

ίϯςΩετ iOSΞϓϦΤϯδχΞͰ͢ɻ Objective-CͱSwift͸஌ࣝ͸͋Δ(͋Δఔ౓) JavaͳΜͱͳ͘஌ͬͯΔɻ Kotlin͸໊લͱͳΜͱͳ͘੝Γ্͕ΓΛɻ Koichiro Oishi, 2017/6/29 3

Slide 4

Slide 4 text

Kotlin͔Θ͍͍ ͱ͍͏͜ͱΛઌ೔ͷษڧձͰ஌Γ·ͨ͠ Koichiro Oishi, 2017/6/29 4

Slide 5

Slide 5 text

ͦͯ͠ SwiftͱࣅͯΔ ͱ͍͏͜ͱ΋ᷚͰ஌Γ·ͨ͠ Koichiro Oishi, 2017/6/29 5

Slide 6

Slide 6 text

ຊ೔͸ͦΜͳϨϕϧͰݟͨ KotlinͱSwiftͷҧ͍Λ ൃදͤͯ͞௖͖·͢ɻ Koichiro Oishi, 2017/6/29 6

Slide 7

Slide 7 text

ࢀߟจݙ Swift ࣮ફೖ໳ ஶऀͷ1ਓɺੴ઒͞Μ͔ΒαΠ ϯ΋Β͍·ͨ͠ɻ Koichiro Oishi, 2017/6/29 7

Slide 8

Slide 8 text

ࢀߟจݙ Kotlin ελʔτϒοΫ ௨শʮ੺΂͜ຊʯ ஶऀͷͨΖ͏͞Μ͔ΒαΠϯ ΋Β͍·ͨ͠ɻ Koichiro Oishi, 2017/6/29 8

Slide 9

Slide 9 text

ࢀߟจݙ ೖ໳·Ͱͷ Kotlin ॿ૸ಡຊ ࢲʹͱͬͯ΋ྑͦ͞͏Ͱ͢ ͪ͜ΒΛϕʔεʹSwiftͱൺֱ ͍͖ͯ͠·͢ Koichiro Oishi, 2017/6/29 9

Slide 10

Slide 10 text

ຊ୊Ͱ͢ɻ Koichiro Oishi, 2017/6/29 10

Slide 11

Slide 11 text

ΞδΣϯμ • جຊจ๏(ͬ͘͟Γ) • Null҆શ • ؔ਺, ΦϒδΣΫτ(γϯάϧτϯ), ίϯύχΦϯΦϒδΣΫτ(static) • σʔλΫϥε • Extension(֦ுؔ਺ɺ֦ுϓϩύςΟ) Koichiro Oishi, 2017/6/29 11

Slide 12

Slide 12 text

͜ͷ͋ͨΓΛKotlinͱSwift Ͱൺֱͯ͠Έ·͢ Koichiro Oishi, 2017/6/29 12

Slide 13

Slide 13 text

جຊจ๏ - ม਺ͷએݴ1 Kotlin val num : Int = 1 var num2 : Int = 2 Swift let num: Int = 1 var num2: Int = 2 valͱlet͸ఆ਺ 1 Kotlinॿ૸ಡຊ p.28 Koichiro Oishi, 2017/6/29 13

Slide 14

Slide 14 text

جຊจ๏ - ม਺ͷએݴ Kotlin val num = 1 var num2 = 2 Swift let num = 1 var num2 = 2 ܕͷলུ(ܕਪ࿦) Koichiro Oishi, 2017/6/29 14

Slide 15

Slide 15 text

جຊจ๏ - whenࣜ2 Kotlin val value = 1 val str = when(value) { 1-> "one" 2-> "two" else -> "other" } 2 Kotlinॿ૸ಡຊ p.30 Koichiro Oishi, 2017/6/29 15

Slide 16

Slide 16 text

جຊจ๏ - whenࣜ Swift let value = 1 let str = { switch value { case 1: "one" case 2: "two" default: "other" } } Koichiro Oishi, 2017/6/29 16

Slide 17

Slide 17 text

Null҆શ - Nullෆڐ༰ܕ3 Kotlin var a: String = "abc" a = null // => ίϯύΠϧΤϥʔ Swift var a: String = "abc" a = nil // => ίϯύΠϧΤϥʔ 3 Kotlinॿ૸ಡຊ p.33 Koichiro Oishi, 2017/6/29 17

Slide 18

Slide 18 text

Null҆શ - Nullڐ༰ܕ Kotlin var b: String? = "abc" b = null // => OK Swift var b: String? = "abc" b = nil // => OK Koichiro Oishi, 2017/6/29 18

Slide 19

Slide 19 text

Null҆શ - Null νΣοΫͱ҆શͳݺͼग़͠ Kotlin Null ෆڐ༰ܕ΁ͷࢀর var a: String = "abc" val l : Int = a.length // => OK Null ڐ༰ܕ΁ͷࢀর var b: String? = "abc" val l : Int = b.length // => ίϯύΠϧΤϥʔ Koichiro Oishi, 2017/6/29 19

Slide 20

Slide 20 text

Null҆શ - Null ڐ༰ܕͷϝιουݺͼग़͠ Kotlin Null ෆڐ༰ܕ΁ͷࢀর var b: String? = "abc" val l : Int = if(b != null) b.length else -1 Null ڐ༰ܕ΁ͷࢀর val l : Int? = b?.length Koichiro Oishi, 2017/6/29 20

Slide 21

Slide 21 text

Null҆શ - Null ڐ༰ܕͷϝιουݺͼग़͠ Swift Null ෆڐ༰ܕ΁ͷࢀর var b: String? = "abc" let l: Int = b?.characters.count ?? -1 Null ڐ༰ܕ΁ͷࢀর let l: Int? = b?.characters.count Koichiro Oishi, 2017/6/29 21

Slide 22

Slide 22 text

Null҆શ - ΤϧϏεԋࢉࢠ Kotlin val l: Int = b?.length ?: -1 Swift let l: Int = b?.characters.count ?? -1 Koichiro Oishi, 2017/6/29 22

Slide 23

Slide 23 text

Null҆શ - !!ԋࢉࢠ Kotlin val l: Int = b!!.length b͕Null(nil)ͩͬͨΒ KotlinͰ͸NullPointerException͕ൃੜ Koichiro Oishi, 2017/6/29 23

Slide 24

Slide 24 text

Null҆શ - !!ԋࢉࢠ Swift let l: Int = b!.characters.count ڧ੍Ξϯϥοϓ b͕Null(nil)ͩͬͨΒ SwiftͰ͸Ϋϥογϡ͠·͢ Koichiro Oishi, 2017/6/29 24

Slide 25

Slide 25 text

Null҆શ - Swiftͷ৔߹ if let count = b?.characters.count { print(count) //ඇoptionalܕ } if letͷϒϩοΫ಺Ͱ͸Nullෆڐ༰ܕ(ඇoptionalܕ) ͱͯ͠࢖͑Δ Koichiro Oishi, 2017/6/29 25

Slide 26

Slide 26 text

Null҆શ - Swiftͷ৔߹ guard let count = b?.characters.count else { return } print(count) //ඇoptionalܕ guardจҎ߱Ͱ͸Nullෆڐ༰ܕ(ඇoptionalܕ)ͱ͠ ͯ࢖͑Δ Koichiro Oishi, 2017/6/29 26

Slide 27

Slide 27 text

ؔ਺4 Kotlin fun add(x: Int, y: Int): Int { return x + y } Swift func add(x: Int, y: Int) -> Int { return x + y } 4 Kotlinॿ૸ಡຊ p.36 Koichiro Oishi, 2017/6/29 27

Slide 28

Slide 28 text

ΦϒδΣΫτ(γϯάϧτϯ)5 Kotlin ఆٛ object DataProviderManager { fun registerDataProvider(provider: DataProvider) { // ... } } ݺͼग़͠ DataProviderManager.registerDataProvider(...) 5 Kotlinॿ૸ಡຊ p.47 Koichiro Oishi, 2017/6/29 28

Slide 29

Slide 29 text

ΦϒδΣΫτ(γϯάϧτϯ) Swift ఆٛ class DataProviderManager { static let sharedInstance = DataProviderManager() private init() { ... } func registerDataProvider(provider: DataProvider) { } } ݺͼग़͠ DataProviderManager.sharedInstance.registerDataProvider(...) Koichiro Oishi, 2017/6/29 29

Slide 30

Slide 30 text

ίϯύχΦϯΦϒδΣΫτ(static) Kotlin ఆٛ class MyClass { companion object Factory { fun create(): MyClass = MyClass() } } ݺͼग़͠ val instance = MyClass.create() Koichiro Oishi, 2017/6/29 30

Slide 31

Slide 31 text

ίϯύχΦϯΦϒδΣΫτ(static) Swift ఆٛ class MyClass { static func create() -> MyClass { return MyClass() } } ݺͼग़͠ let test = MyClass.create() Koichiro Oishi, 2017/6/29 31

Slide 32

Slide 32 text

σʔλΫϥε6 Kotlin data class Person(val id: Long, var name: String) Kotlinʹ͸Pair΍TripleͳͲ΋͋Δ͕ɺ ม਺໊͸͚ͭΒΕͳ͍ͬΆ͍ Swift typealias Person = (id: Int, name: String) σʔλΫϥε = ׬શʹSwiftͷλϓϧͰ΋ͳ͘ SwiftͷStructͬΆ͞΋͋Δʁ 6 Kotlinॿ૸ಡຊ p.52 Koichiro Oishi, 2017/6/29 32

Slide 33

Slide 33 text

Extension - ֦ுؔ਺(Extension Function)7 Kotlin fun String.appendBeer() : String = "${this}beer!" println("I like".appendBeer()) // => I like beer! Swift extension String { func appendBeer() -> String { return "\(self)beer!" } } print("I like".appendBeer()) 7 Kotlinॿ૸ಡຊ p.55 Koichiro Oishi, 2017/6/29 33

Slide 34

Slide 34 text

Extension - ֦ுϓϩύςΟ(Extension Properties) Kotlin ఆٛ val List.lastIndex: Int get() = size - 1 ݺͼग़͠ val arr = listOf(1,2,3) println(arr.lastIndex) //=> 2 Koichiro Oishi, 2017/6/29 34

Slide 35

Slide 35 text

Extension - ֦ுϓϩύςΟ(Extension Properties) Swift ఆٛ extension Array { var lastIndex: Int { return self.count - 1 } } ݺͼग़͠ let arr = [1,2,3] print(arr.lastIndex) //=> 2 Koichiro Oishi, 2017/6/29 35

Slide 36

Slide 36 text

ࠓճ͸͜͜·ͰͰ͕͢ɺ ͜Ε͔Β΋Kotlin΍͍͖ͬͯ·͢ ߴ֊ؔ਺ɾϥϜμɾΞΫηε੍ݶ͋ͨΓ΋ औΓ্͔͛ͨͬͨͷͰ͕͢ϘϦϡʔϜతʹ… Koichiro Oishi, 2017/6/29 36

Slide 37

Slide 37 text

SwiftΛ͋·Γ͝ଘ஌ͳ͍ํɺ ͍͔͕Ͱͨ͠Ͱ͠ΐ͏͔ Koichiro Oishi, 2017/6/29 37

Slide 38

Slide 38 text

Swift΋ ͔Θ͍͍ͷͰ͸? ͱݴͬͯΈ͔ͨͬͨͷͰ͢ Koichiro Oishi, 2017/6/29 38

Slide 39

Slide 39 text

࠷ޙʹ Kotlinͷ͕͜͜ྑ͍ ͱ͔ڭ͍͑ͯͩ͘͞ʂ Koichiro Oishi, 2017/6/29 39

Slide 40

Slide 40 text

ͪͳΈʹ ͜ͷαΠτͰKotlinͱSwiftͷҧ ͍͕·ͱ·ͬͯ·͢Ͷɻ Swift is like Kotlin http://nilhcem.com/swift-is- like-kotlin/ Koichiro Oishi, 2017/6/29 40

Slide 41

Slide 41 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ Koichiro Oishi, 2017/6/29 41