API ของแพลตฟอร์ม
เข้าถึงความสามารถดั้งเดิมของระบบ
API ของแพลตฟอร์ม เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเข้าถึงความสามารถของระบบเนทีฟ
โค้ดที่ใช้ร่วมกันจำเป็นต้องเข้าถึงความสามารถของอุปกรณ์ในบางครั้ง ไม่ว่าจะเป็นการจัดเก็บข้อมูล การตั้งค่า นาฬิกา หรือกลไกเครือข่าย KMM มีหลายวิธีในการเข้าถึง API ของระบบเนทีฟอย่างเป็นระเบียบ
expect/actual สำหรับค่าพื้นฐาน
สำหรับค่าจากแพลตฟอร์มที่มีขนาดเล็ก ให้ใช้ expect/actual โค้ดส่วนกลางจะยังคงสะอาด ในขณะที่แต่ละแพลตฟอร์มเติมรายละเอียดที่แตกต่างกัน
// commonMain
expect fun currentTimeMillis(): Long
// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()การฉีดการพึ่งพาโค้ดของแพลตฟอร์ม
แนวทางที่ยืดหยุ่นยิ่งขึ้นคือ กำหนดอินเทอร์เฟซในโค้ดส่วนกลาง แล้วฉีดส่วนการทำงานของแพลตฟอร์มจากแต่ละแอปเข้าไป
// commonMain
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}การนำไปใช้งานบน Android
Android นำอินเทอร์เฟซไปใช้งานด้วย SharedPreferences แล้วจัดเตรียมให้โค้ดที่ใช้ร่วมกัน
// 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
iOS นำอินเทอร์เฟซเดียวกันไปใช้งานด้วย NSUserDefaults จากเฟรมเวิร์ก Foundation
// 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)
}การเรียกใช้ส่วนติดต่อโปรแกรมประยุกต์ของ iOS
จาก iosMain คุณสามารถเรียกใช้เฟรมเวิร์กของ Apple ได้โดยตรง เพราะ Kotlin/Native สร้างส่วนเชื่อมต่อการทำงานร่วมกันให้กับเฟรมเวิร์กเหล่านั้น
import platform.UIKit.UIDevice
fun deviceModel(): String = UIDevice.currentDevice.modelการเรียกใช้ส่วนติดต่อโปรแกรมประยุกต์ของ Android
androidMain มี SDK ของ Android ให้ใช้งานครบถ้วน เนื่องจากคอมไพล์โดยอ้างอิงกับแพลตฟอร์ม Android
import android.os.Build
fun deviceModel(): String = Build.MODELไลบรารีหลายแพลตฟอร์มสำเร็จรูป
บ่อยครั้งคุณไม่จำเป็นต้องสร้างส่วนเชื่อมต่อการทำงานร่วมกันเอง ไลบรารีต่างๆ มีการห่อหุ้มความสามารถทั่วไปไว้ให้แล้ว:
- multiplatform-settings — การจัดเก็บข้อมูลแบบคีย์-ค่า
- Ktor — การเชื่อมต่อเครือข่าย
- SQLDelight — ฐานข้อมูลภายในเครื่อง
การจัดเตรียมส่วนการนำไปใช้งาน
ฉีดส่วนการนำไปใช้งานของแพลตฟอร์มเมื่อเริ่มต้นแอป โดยทั่วไปจะทำผ่านเฟรมเวิร์ก DI อย่าง Koin เพื่อให้โค้ดที่ใช้ร่วมกันได้รับส่วนที่ถูกต้อง
// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injectedการเลือกแนวทาง
แนวทาง:
- ค่าขนาดเล็ก →
expect/actual - การทำงานที่มีหลายเมธอด → อินเทอร์เฟซ + การฉีด
- ความต้องการทั่วไป → ใช้ไลบรารีหลายแพลตฟอร์มที่มีอยู่แล้ว
ตัวอย่างนามธรรมที่เรียกใช้งานได้
แนวคิดเรื่องอินเทอร์เฟซใช้ Kotlin พื้นฐาน ในที่นี้ การนำไปใช้งานในหน่วยความจำทำหน้าที่แทนแหล่งจัดเก็บข้อมูลของแพลตฟอร์ม
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"))
}ตรวจสอบความเข้าใจ
คุณต้องการความสามารถด้านการจัดเก็บข้อมูลที่มีหลายเมธอด ซึ่งนำไปใช้งานแตกต่างกันในแต่ละแพลตฟอร์มและทดสอบได้ง่าย แนวทางใดที่แนะนำ
สรุปทบทวน
คุณสามารถเข้าถึงความสามารถของระบบเนทีฟได้อย่างเป็นระเบียบ:
expect/actualสำหรับค่าพื้นฐาน- อินเทอร์เฟซส่วนกลาง + การนำไปใช้งานของแพลตฟอร์มที่ฉีดเข้าไปสำหรับการทำงาน
- การเชื่อมต่อกับระบบอื่นโดยตรงใน
androidMain/iosMain - นำไลบรารีหลายแพลตฟอร์มกลับมาใช้เมื่อทำได้
เท่านี้ก็จบหลักสูตรพื้นฐาน KMM แล้ว
คำถามที่พบบ่อย
บทเรียน “API ของแพลตฟอร์ม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “API ของแพลตฟอร์ม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “API ของแพลตฟอร์ม”
เข้าถึงความสามารถดั้งเดิมของระบบ คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “API ของแพลตฟอร์ม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ