Kotlin Academy · Lektion

Plattforms-API:er

Få åtkomst till inbyggda funktioner

Lektion 4 av 413 steg

Plattforms-API:er är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Åtkomst till inbyggda funktioner

Gemensam kod behöver ibland åtkomst till enhetens funktioner – lagring, inställningar, klockan och nätverk. KMM erbjuder flera sätt att få åtkomst till plattformsspecifika API:er på ett tydligt sätt.

expect/actual för primitiva värden

Använd expect/actual för små plattformsspecifika värden. Den gemensamma koden förblir ren, medan varje plattform fyller i detaljerna.

// commonMain
expect fun currentTimeMillis(): Long

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

Beroendeinjektion av plattformskod

Ett mer flexibelt tillvägagångssätt är att definiera ett interface i den gemensamma koden och injicera en plattformsimplementation från varje app.

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

Android-implementation

Android implementerar interfacet med SharedPreferences och tillhandahåller det till den gemensamma koden.

// 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-implementation

iOS implementerar samma interface med NSUserDefaults från Foundation-ramverket.

// 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)
}

Anropa inbyggda iOS-API:er

Från iosMain kan du anropa Apples ramverk direkt, eftersom Kotlin/Native genererar interoperabilitetsbindningar för dem.

import platform.UIKit.UIDevice

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

Anropa Android-API:er

androidMain har hela Android SDK tillgängligt, eftersom det kompileras mot Android-plattformen.

import android.os.Build

fun deviceModel(): String = Build.MODEL

Färdiga multiplattformsbibliotek

Ofta behöver du inte skapa någon egen interoperabilitet. Bibliotek paketerar redan vanliga funktioner:

  • multiplatform-settings — lagring av nyckel-värden
  • Ktor — nätverk
  • SQLDelight — lokal databas

Tillhandahålla implementationer

Injicera plattformsimplementationer när appen startar, vanligtvis via ett DI-ramverk som Koin, så att den gemensamma koden får rätt implementation.

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

Välja tillvägagångssätt

Riktlinjer:

  • Litet värde → expect/actual
  • Beteende med flera metoder → interface + injicering
  • Vanligt behov → använd ett befintligt multiplattformsbibliotek

Ett körbart exempel på abstraktion

Idén med interface är vanlig Kotlin. Här fungerar en implementation i minnet som ersättning för en plattformsspecifik lagring.

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"))
}

Snabbtest

Du behöver en lagringsfunktion med flera metoder, som implementeras på olika sätt på varje plattform och som är enkel att testa. Vilket tillvägagångssätt rekommenderas?

Sammanfattning

Du kan få åtkomst till inbyggda funktioner på ett tydligt sätt:

  • expect/actual för primitiva värden
  • Gemensamt interface + injicerad plattformsimplementation för beteenden
  • Direkt interoperabilitet i androidMain/iosMain
  • Återanvänd multiplattformsbibliotek när det är möjligt

Det avslutar kursen KMM Basics.

Gratis att börja

Lär dig Kotlin med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Plattforms-API:er” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”Plattforms-API:er”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Plattforms-API:er”?

Få åtkomst till inbyggda funktioner Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?

Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Plattforms-API:er”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?

Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. KMM-projektstruktur
  2. expect och actual
  3. Dela affärslogik
  4. Plattforms-API:er
← Tillbaka till Kotlin Academy