ΠΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΠΎΠ»Π³Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
, Π»ΠΈΡΠ½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠ»ΠΎΡ
ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Room
(Android) ΠΈΠ»ΠΈ CoreData
(iOS) Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ:
// Android + Kotlin
@Dao
interface UserDao {
@Query("SELECT * FROM users")
fun getUsers(): Flow<List<User>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun saveUsers(users: List<User>)
}
// iOS + Swift
func saveUsers(_ users: [User]) {
let context = persistentContainer.viewContext
users.forEach { user in
let entity = UserEntity(context: context)
entity.id = user.id
entity.name = user.name
}
try? context.save()
}
ΠΠ΅Π»ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ:
// iOS
func fetchWithRetry(maxAttempts: Int = 3) async throws -> Data {
for attempt in 1...maxAttempts {
do {
return try await fetchData()
} catch {
if attempt == maxAttempts { throw error }
try await Task.sleep(nanoseconds: 1_000_000_000 * UInt64(attempt))
}
}
fatalError("Unreachable")
}
// Android + OkHttp
val client = OkHttpClient.Builder()
.cache(Cache(cacheDir, 10 * 1024 * 1024)) // 10 MB
.build()
#Π±ΡΡΡ