ファイルの操作
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チャレンジ
簡単このプログラムには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)) }
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド