Menu
CoddyTech

ファイルの操作

CoddyのSwiftジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 1/57。

実際のプログラムは複数のファイルに分割されています。Swiftでは、アプリの各.swiftファイルがまとめて1つのモジュールにコンパイルされるため、あるファイルで宣言された関数や型は、importなしで他のどのファイルからも使用できます。

// Greeting.swift
func greeting(for name: String) -> String {
    "Hello, \(name)!"
}

// main.swift
print(greeting(for: "Ada"))

このプログラムを実行するとHello, Ada!が出力されます。main.swiftはGreeting.swiftにある関数を呼び出します。

トップレベルの文、つまり関数や型の外部で単独で実行されるコードを含められるファイルは1つだけです。そのファイルはmain.swiftで、プログラムの開始地点です。他のファイルには宣言のみを記述します:

// Greeting.swift
func greeting(for name: String) -> String { "Hello, \(name)!" }
// print("hi")      // エラー: ここではトップレベルに文を記述できません

// main.swift
let name = readLine() ?? "friend"   // main.swift ではトップレベルのコードを記述できます
print(greeting(for: name))

一般的な構成では、型ごとにファイルを1つ用意し、型の名前を付けます。Dog.swiftにはDogを、Account.swiftにはAccountを記述します。このセクションの課題では、コードはそれらのファイルに記述し、main.swiftには用意された入出力コードが含まれます。通常、これは編集できません。エディターでは各ファイルがタブとして表示されます。

Dog.swift        // class Dog { ... }
Account.swift    // struct Account { ... }
main.swift       // 入力を読み取り、結果を出力する

アクセス制御はファイルにも適用されます。private と fileprivate は宣言をほかのファイルから隠します。一方、デフォルトの internal では、モジュール内のすべてのファイルから参照できます。

// Secret.swift
fileprivate let salt = "x7"          // このファイルからのみ参照できる
func hashed(_ s: String) -> String { s + salt }

// main.swift
print(hashed("pw"))                  // 問題なし: hashed は internal
// print(salt)                       // エラー: salt は fileprivate
challenge icon

チャレンジ

簡単

このプログラムには2つのファイルがあります。main.swiftは名前を読み取り、greeting(for:)の結果を出力します。Greeting.swiftのgreeting(for:)を完成させ、名前がAdaの場合はHello, Ada!を、名前が空の場合はHello, friend!を返すようにしてください。

コードはGreeting.swiftに記述してください。main.swiftには提供された入出力コードが含まれており、編集できません。

自分で試してみよう

// 用意された入出力コード: そのままにしてください
var input: [String] = []
while let line = readLine() { input.append(line) }
for name in input { print(greeting(for: name)) }
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Swiftプレイグラウンド