文件操作
本课属于 Coddy Swift 学习旅程的“面向对象编程”单元。第 1 课,共 57 课。
实际的程序会拆分成多个文件。在 Swift 中,应用的每个 .swift 文件都会一起编译成一个模块,因此,在一个文件中声明的函数或类型可以在其他任何文件中使用,无需导入:
// Greeting.swift
func greeting(for name: String) -> String {
"Hello, \(name)!"
}
// main.swift
print(greeting(for: "Ada"))运行此程序会输出 Hello, Ada!:main.swift 调用了定义在 Greeting.swift 中的函数。
只有一个文件可以包含顶层语句,也就是在任何函数或类型之外独立运行的代码。这个文件是 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))通常的布局是每个文件放一种类型,并以该类型命名: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挑战
简单这个程序有两个文件。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 在线编辑器