Kotlin Academy · Lektion

Platform-API'er

Få adgang til native funktioner

Lektion 4 af 413 trin

Platform-API'er er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Adgang til platformsspecifikke funktioner

Fælles kode har nogle gange brug for enhedsfunktioner — lagring, indstillinger, uret og netværksmotoren. KMM giver flere måder at få ren adgang til platformsspecifikke API'er.

expect/actual til primitive værdier

Til små platformspecifikke værdier kan du bruge expect/actual. Den fælles kode forbliver ren, mens hver platform udfylder detaljerne.

// commonMain
expect fun currentTimeMillis(): Long

// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()

Afhængighedsinjektion af platformskode

En mere fleksibel tilgang er at definere en grænseflade i fælles kode og injicere en platformimplementering fra hver app.

// commonMain
interface Storage {
    fun save(key: String, value: String)
    fun load(key: String): String?
}

Android-implementering

Android implementerer grænsefladen med SharedPreferences og leverer den til den fælles kode.

// androidMain
import android.content.SharedPreferences

class AndroidStorage(private val prefs: SharedPreferences) : Storage {
    override fun save(key: String, value: String) {
        prefs.edit().putString(key, value).apply()
    }
    override fun load(key: String): String? = prefs.getString(key, null)
}

iOS-implementering

iOS implementerer den samme grænseflade med NSUserDefaults fra Foundation-rammeværket.

// iosMain
import platform.Foundation.NSUserDefaults

class IosStorage : Storage {
    private val defaults = NSUserDefaults.standardUserDefaults
    override fun save(key: String, value: String) = defaults.setObject(value, key)
    override fun load(key: String): String? = defaults.stringForKey(key)
}

Kald af platformsspecifikke iOS-API'er

Fra iosMain kan du kalde Apples rammeværker direkte, fordi Kotlin/Native genererer interoperabilitetsbindinger til dem.

import platform.UIKit.UIDevice

fun deviceModel(): String = UIDevice.currentDevice.model

Kald af Android-API'er

androidMain har hele Android SDK tilgængeligt, fordi det kompileres mod Android-platformen.

import android.os.Build

fun deviceModel(): String = Build.MODEL

Færdige multiplatform-biblioteker

Ofte har du ikke brug for tilpasset interoperabilitet. Biblioteker indpakker allerede almindelige funktioner:

  • multiplatform-settings — lagring af nøgleværdier
  • Ktor — netværk
  • SQLDelight — lokal database

Levering af implementeringer

Indsæt platformimplementeringer ved appens opstart, typisk via et afhængighedsinjektionsrammeværk som Koin, så den fælles kode modtager den rigtige implementering.

// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injected

Valg af tilgang

Retningslinjer:

  • Lille værdi → expect/actual
  • Adfærd med flere metoder → grænseflade + injektion
  • Fælles behov → brug et eksisterende multiplatform-bibliotek

En kørbar abstraktionsdemonstration

Idéen med grænseflader er helt almindelig Kotlin. Her fungerer en implementering i hukommelsen som et platformslager.

interface Storage {
    fun save(key: String, value: String)
    fun load(key: String): String?
}

class MemoryStorage : Storage {
    private val map = mutableMapOf<String, String>()
    override fun save(key: String, value: String) { map[key] = value }
    override fun load(key: String): String? = map[key]
}

fun main() {
    val s: Storage = MemoryStorage()
    s.save("name", "Ada")
    println(s.load("name"))
}

Hurtigt tjek

Du har brug for en lagringsfunktion med flere metoder, som implementeres forskelligt på hver platform og nemt kan testes. Hvad er den anbefalede tilgang?

Opsummering

Du kan få ren adgang til platformsspecifikke funktioner:

  • expect/actual til primitive værdier
  • Fælles grænseflade + injiceret platformimplementering til adfærd
  • Direkte interoperabilitet i androidMain/iosMain
  • Genbrug multiplatform-biblioteker, når det er muligt

Det afslutter kurset KMM Basics.

Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Platform-API'er” gratis?

Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “Platform-API'er”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Platform-API'er”?

Få adgang til native funktioner Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Kotlin Academy?

Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Platform-API'er”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?

Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. KMM-projektstruktur
  2. expect og actual
  3. Deling af forretningslogik
  4. Platform-API'er
← Tilbage til Kotlin Academy