- Published on
Fayllarni yozish va o'qish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
iOS dagi har bir ilova qurilmada o'zining shaxsiy papkasiga ega β hujjatlar papkasi. Siz bu yerda fayllarni erkin yozishingiz va o'qishingiz mumkin. Boshqa ilovalar uni ko'ra olmaydi va u ilovalar oralig'ida saqlanib qoladi.
Fayl saqlash @AppStorage ga to'g'ri kelmasa ham SwiftData kerak emas bo'lsa to'g'ri keladi: matn fayllari, JSON eksport, API javobining lokal keshi.
Asosiy funksiyalar
import Foundation
// Ilovaning hujjatlar papkasi URL sini olish
func hujjatlarPapkasi() -> URL {
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
}
// Papka ichida fayl URL yaratish
func faylURL(nomi: String) -> URL {
hujjatlarPapkasi().appendingPathComponent(nomi)
}
// String ni faylga yozish
func eslatmaSaqlash(_ matn: String) {
let url = faylURL(nomi: "eslatma.txt")
try? matn.write(to: url, atomically: true, encoding: .utf8)
}
// String ni fayldan o'qish
func eslatmaYuklash() -> String? {
let url = faylURL(nomi: "eslatma.txt")
return try? String(contentsOf: url, encoding: .utf8)
}
| Qator | Vazifasi |
|---|---|
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] | Tizimdan ilovaning hujjatlar papkasi URL sini so'raydi. [0] β iOS da har doim bitta natija bor. |
.appendingPathComponent(nomi) | Papka URL siga fayl nomini qo'shib to'liq fayl manzili yaratadi. |
matn.write(to: url, atomically: true, encoding: .utf8) | Matnni diskka yozadi. atomically: true β vaqtinchalik faylga yozib, so'ng nomini o'zgartiradi β xavfsizroq. |
try? | Xatoni ishtiyoriy natijaga aylantiradi. Yozish yoki o'qish muvaffaqiyatsiz bo'lsa nil qaytaradi, crash emas. |
SwiftUI View bilan
import SwiftUI
struct EslatmaRedaktori: View {
@State private var matn = ""
var body: some View {
VStack(spacing: 16) {
TextEditor(text: $matn)
.border(Color.secondary, width: 1)
.padding()
HStack {
Button("Saqlash") {
eslatmaSaqlash(matn)
}
.buttonStyle(.borderedProminent)
Button("Yuklash") {
matn = eslatmaYuklash() ?? ""
}
.buttonStyle(.bordered)
}
}
.onAppear {
// Ko'rinish paydo bo'lganda avtomatik yuklash
matn = eslatmaYuklash() ?? ""
}
.navigationTitle("Eslatma")
}
}
JSON β Codable tuzilmalarni saqlash
struct FoydalanuvchiProfili: Codable {
var ism: String
var ball: Int
}
// Codable struct ni JSON faylga saqlash
func profilSaqlash(_ profil: FoydalanuvchiProfili) {
// JSONEncoder struct ni xom Data ga aylantiradi
let data = try? JSONEncoder().encode(profil)
// Data baytlarini faylga yozish
try? data?.write(to: faylURL(nomi: "profil.json"))
}
// JSON fayldan struct ga yuklash
func profilYuklash() -> FoydalanuvchiProfili? {
// Fayldan xom Data o'qish
guard let data = try? Data(contentsOf: faylURL(nomi: "profil.json")) else {
return nil // Fayl hali yo'q
}
// Data ni struct ga dekodlash
return try? JSONDecoder().decode(FoydalanuvchiProfili.self, from: data)
}
// Fayl mavjudligini tekshirish
func faylMavjud(nomi: String) -> Bool {
FileManager.default.fileExists(atPath: faylURL(nomi: nomi).path)
}
Tezkor ma'lumotnoma
| Sintaksis | Vazifasi |
|---|---|
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] | Hujjatlar papkasi URL si |
url.appendingPathComponent("fayl.txt") | To'liq fayl URL yaratadi |
matn.write(to: url, atomically: true, encoding: .utf8) | String ni xavfsiz yozadi |
String(contentsOf: url, encoding: .utf8) | Faylni String ga o'qiydi |
JSONEncoder().encode(qiymat) | Codable qiymatni Data ga aylantiradi |
JSONDecoder().decode(Tur.self, from: data) | Data ni Codable turga dekodlaydi |
FileManager.default.fileExists(atPath:) | Fayl mavjudligini tekshiradi |
π― Topshiriq: doimiy eslatma
TextEditor va ikkita tugma β "Saqlash" va "Yuklash" bilan bitta ekranli eslatma ilovasi yarating. "Saqlash" bosilganda matnni hujjatlar papkasiga yozing. "Yuklash" bosilganda o'qib ko'rsating. Keyin persistenslikni sinang: eslatma yozing, saqlang, simulyatorda ilovani to'liq yoping, qayta oching, "Yuklash" bosing β eslatma hali shu yerda bo'lsin.