Published on

Fayllarni yozish va o'qish

Authors

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

SintaksisVazifasi
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.

Buy mea coffee