Menu
Coddy logo textTech

ファイルの操作

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")      // error: ステートメントはここのトップレベルでは許可されていません

// main.swift
let name = readLine() ?? "friend"   // トップレベルのコードは main.swift で問題ありません
print(greeting(for: name))

通常の構成では、1つのファイルに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プレイグラウンド