Under the hood - engines
Android: OkHttp, HttpUrlConnection
Slide 111
Slide 111 text
Under the hood - engines
Android: OkHttp, HttpUrlConnection
iOS: NSUrlSession
Slide 112
Slide 112 text
class NoteApi() {
private val client = HttpClient()
suspend fun fetchNote(): String
= client.get("http://...")
}
Slide 113
Slide 113 text
How do we support
different platforms?
Slide 114
Slide 114 text
common/PlatformName.kt
expect fun getPlatform(): String
Slide 115
Slide 115 text
android/PlatformName.kt
actual fun getPlatform()= "Android"
Slide 116
Slide 116 text
ios/PlatformName.kt
actual fun getPlatform() = "iOS"
Slide 117
Slide 117 text
Common/KeyValueStore.kt
expect class KeyValueStore() {
fun setString(key: String, value: String)
fun getString(key: String): String
}
Slide 118
Slide 118 text
android/KeyValueStore.kt
actual class KeyValueStore() {
private val prefs: SharedPreferences
actual fun setString() //...
actual fun getString() //...
}
Slide 119
Slide 119 text
ios/KeyValueStore.kt
actual class KeyValueStore() {
private val userDefaults: NSUserDefaults
actual fun setString() //...
actual fun getString() //...
}
Slide 120
Slide 120 text
expect interface Closeable {
fun close()
}
actual typealias Closeable = java.io.Closeable
Slide 121
Slide 121 text
Platform differences
Slide 122
Slide 122 text
No content
Slide 123
Slide 123 text
Unsupported in Swift/Obj-C
Suspend functions
Inline classes
Slide 124
Slide 124 text
Asyncronous work
Slide 125
Slide 125 text
Coroutines
Only single-threaded code is currently
supported for Kotlin/Native
Slide 126
Slide 126 text
Exceptions
Slide 127
Slide 127 text
Exceptions
All Kotlin exceptions are unchecked
Slide 128
Slide 128 text
Exceptions
All Kotlin exceptions are unchecked
Swift only has checked errors
Slide 129
Slide 129 text
Exceptions
Annotate with @Throws
Slide 130
Slide 130 text
Primitive types
Int -> KotlinInt
Slide 131
Slide 131 text
Primitive types
Int -> KotlinInt (NSNumber)
Slide 132
Slide 132 text
Generics
Slide 133
Slide 133 text
Generics
Experimental for Kotlin Native
Slide 134
Slide 134 text
Generics
Experimental for Kotlin Native
extraOpts "-Xobjc-generics"
Slide 135
Slide 135 text
Kotlin:
class Generic
Swift:
class Generic
Slide 136
Slide 136 text
Kotlin:
class Generic
Swift:
class Generic
Slide 137
Slide 137 text
Kotlin:
class Generic(val item: T)
Swift:
class Generic {
let item: T?
}
Slide 138
Slide 138 text
Kotlin:
class Generic(val item: T)
Swift:
class Generic {
let item: T?
}
?
Slide 139
Slide 139 text
Kotlin:
class Generic(val item: T)
Swift:
class Generic {
let item: T
}