0Pricing
Swift Academy · レッスン

データの読み書き

Dataや文字列をディスクに永続化します。

「データの読み書き」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

データの読み書き

FoundationのData型は生のバイト列を保持します。また、StringとDataはいずれもファイルURLからの読み込みとファイルURLへの書き込みに対応しています。

文字列の書き込み

write(to:atomically:encoding:)は、文字列をファイルURLに保存します。アトミック書き込みでは一時ファイルを使うため、データの破損を防げます。

import Foundation

let url = URL(fileURLWithPath: "/tmp/hello.txt")
try? "Hello, file!".write(to: url, atomically: true, encoding: .utf8)
print("Wrote string to disk")

文字列の読み込み

String(contentsOf:encoding:)は、ファイルをテキストとしてメモリに読み戻します。

import Foundation

let url = URL(fileURLWithPath: "/tmp/hello.txt")
if let text = try? String(contentsOf: url, encoding: .utf8) {
    print(text)
}

Dataの操作

Data(contentsOf:)は任意のファイルを生のバイト列として読み込みます。画像、アーカイブ、バイナリ形式などに適しています。

import Foundation

let url = URL(fileURLWithPath: "/tmp/hello.txt")
if let data = try? Data(contentsOf: url) {
    print("Byte count: \(data.count)")
}

Dataの書き込み

data.write(to:)はバイト列をファイルに保存します。エンコーディングと組み合わせれば、テキストやシリアライズされた任意のデータを保存できます。

import Foundation

let bytes = Data([0x48, 0x69])
let url = URL(fileURLWithPath: "/tmp/bytes.bin")
try? bytes.write(to: url)
print("Wrote raw data")

DataからStringへの変換

バイトエンコーディングが分かっている場合は、String(data:encoding:)を使ってDataをテキストに変換します。

import Foundation

let data = Data([0x48, 0x69])
if let s = String(data: data, encoding: .utf8) {
    print(s)
}

JSONのエンコード

JSONEncoderを使うと、Codableな値をディスクに書き込めるDataに変換できます。

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")

JSONのデコード

データを読み戻し、JSONDecoderでモデル型にデコードします。

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

アトミック書き込み

atomically: trueオプションを指定すると、一時ファイルに書き込んでから名前を変更します。そのため、読み取り側が書き込み途中のファイルを参照することはありません。

import Foundation

let url = URL(fileURLWithPath: "/tmp/safe.txt")
try? "important".write(to: url, atomically: true, encoding: .utf8)
print("Atomic write done")

エラー処理

ファイル操作はエラーをスローします。クラッシュさせるのではなく、do/catchを使ってファイルの欠落や権限の問題に対応してください。

import Foundation

let url = URL(fileURLWithPath: "/does/not/exist.txt")
do {
    _ = try String(contentsOf: url, encoding: .utf8)
} catch {
    print("Read failed: \(error.localizedDescription)")
}

追加と上書き

基本的なwrite(to:)はファイルを上書きします。追加するにはFileHandleを開き、書き込み前に末尾へ移動します。

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")

確認問題

書き込み時にatomically: trueを指定すると、何が保証されますか?

まとめ

String(contentsOf:)とwrite(to:atomically:encoding:)でテキストを読み書きし、Dataで生のバイト列を扱い、JSONEncoder/Decoderでモデルを保存しました。また、アトミック書き込みを使い、エラーを捕捉し、FileHandleでデータを追加しました。次は、ディレクトリの管理です。

よくある質問

「データの読み書き」レッスンは無料ですか?

はい。「データの読み書き」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「データの読み書き」で何を学びますか?

Dataや文字列をディスクに永続化します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「データの読み書き」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. URLとファイルパス
  2. データの読み書き
  3. ディレクトリの管理
  4. アプリのサンドボックスディレクトリ
← Swift Academyに戻る