Odczytywanie i zapisywanie danych
Trwałe zapisywanie danych i ciągów znaków na dysku.
Odczytywanie i zapisywanie danych to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Odczytywanie i zapisywanie danych
Typ Data z Foundation przechowuje surowe bajty, a zarówno String, jak i Data potrafią odczytywać dane z plikowych adresów URL i zapisywać je pod nimi.
Zapisywanie ciągu znaków
write(to:atomically:encoding:) zapisuje ciąg znaków pod plikowym adresem URL. Zapis atomowy korzysta z pliku tymczasowego, aby uniknąć uszkodzenia danych.
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
try? "Hello, file!".write(to: url, atomically: true, encoding: .utf8)
print("Wrote string to disk")Odczytywanie ciągu znaków
String(contentsOf:encoding:) wczytuje plik z powrotem do pamięci jako tekst.
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
if let text = try? String(contentsOf: url, encoding: .utf8) {
print(text)
}Praca z Data
Data(contentsOf:) odczytuje dowolny plik jako surowe bajty, dzięki czemu nadaje się do obrazów, archiwów i formatów binarnych.
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
if let data = try? Data(contentsOf: url) {
print("Byte count: \(data.count)")
}Zapisywanie danych
data.write(to:) zapisuje bajty w pliku. W połączeniu z kodowaniem można w ten sposób przechowywać tekst lub dowolny zserializowany ładunek danych.
import Foundation
let bytes = Data([0x48, 0x69])
let url = URL(fileURLWithPath: "/tmp/bytes.bin")
try? bytes.write(to: url)
print("Wrote raw data")Konwersja Data na String
Obiekt Data można przekonwertować na tekst za pomocą String(data:encoding:), jeśli znane jest kodowanie bajtów.
import Foundation
let data = Data([0x48, 0x69])
if let s = String(data: data, encoding: .utf8) {
print(s)
}Kodowanie JSON
Za pomocą JSONEncoder można przekształcić wartość zgodną z Codable w obiekt Data gotowy do zapisania na dysku.
import Foundation
struct Note: Codable { let text: String }
let data = try? JSONEncoder().encode(Note(text: "hi"))
let url = URL(fileURLWithPath: "/tmp/note.json")
try? data?.write(to: url)
print("Saved JSON")Dekodowanie JSON
Należy ponownie odczytać dane i zdekodować je za pomocą JSONDecoder do typu modelu.
import Foundation
struct Note: Codable { let text: String }
let url = URL(fileURLWithPath: "/tmp/note.json")
if let data = try? Data(contentsOf: url),
let note = try? JSONDecoder().decode(Note.self, from: data) {
print(note.text)
}Zapisy atomowe
Opcja atomically: true zapisuje dane w pliku tymczasowym, a następnie zmienia jego nazwę, dzięki czemu odczytujący nigdy nie zobaczą pliku zapisanego tylko częściowo.
import Foundation
let url = URL(fileURLWithPath: "/tmp/safe.txt")
try? "important".write(to: url, atomically: true, encoding: .utf8)
print("Atomic write done")Obsługa błędów
Operacje na plikach mogą zgłaszać błędy. Należy używać konstrukcji do/catch, aby reagować na brakujące pliki lub problemy z uprawnieniami, zamiast doprowadzać do awarii programu.
import Foundation
let url = URL(fileURLWithPath: "/does/not/exist.txt")
do {
_ = try String(contentsOf: url, encoding: .utf8)
} catch {
print("Read failed: \(error.localizedDescription)")
}Dopisywanie a zastępowanie
Podstawowa metoda write(to:) zastępuje zawartość pliku. Aby dopisać dane, należy otworzyć obiekt FileHandle i przed zapisem przejść na koniec pliku.
import Foundation
let url = URL(fileURLWithPath: "/tmp/log.txt")
if let handle = try? FileHandle(forWritingTo: url) {
handle.seekToEndOfFile()
handle.write(Data("line\n".utf8))
try? handle.close()
}
print("Appended")Szybkie sprawdzenie
Co gwarantuje opcja atomically: true podczas zapisu?
Podsumowanie
Odczytywali i zapisywali Państwo tekst za pomocą String(contentsOf:) i write(to:atomically:encoding:), obsługiwali surowe bajty przy użyciu Data, zapisywali modele za pomocą JSONEncoder/Decoder, używali zapisów atomowych, przechwytywali błędy i dopisywali dane za pomocą FileHandle. Następny temat: zarządzanie katalogami.
Ucz się Swift dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 122
- Lekcje
- 409
Często zadawane pytania
Czy lekcja „Odczytywanie i zapisywanie danych” jest bezpłatna?
Tak — pełny tekst „Odczytywanie i zapisywanie danych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Odczytywanie i zapisywanie danych”?
Trwałe zapisywanie danych i ciągów znaków na dysku. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Odczytywanie i zapisywanie danych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Adresy URL i ścieżki plików
- Odczytywanie i zapisywanie danych
- Zarządzanie katalogami
- Katalogi piaskownicy aplikacji