class 是 類別 struct 是 結構
類別及結構有很多相同的地方,可以用於 屬性 方法 下標 生成初始化值
也有一些結構沒有,類別有的功能,以下舉例:繼承(inherit) 解構器(deinitializer) 型別轉換 參考計數
以下是一個 class 類別的範例,展示了如何使用屬性和方法:
class student{
// 屬性 (Properties)
var name: String
var age: Int
var grade: String
// 初始化方法 (Initializer)
init(name: String, age: Int, grade: String) {
self.name = name
self.age = age
self.grade = grade
}
// 方法 (Methods)
func increaseAge() {
age += 1
}
func studentInfo() -> String {
return "Name: \(name), Age: \(age), Grade: \(grade)"
}
}
以下是如何實例化一個 class 類別並使用其方法的範例:
let student1 = Student(name: "John", age: 20, grade: "A")
print(student1.studentInfo())
// 輸出:Name: John, Age: 20, Grade: A
student1.increaseAge()
print(student1.studentInfo())
// 輸出:Name: John, Age: 21, Grade: A
儘管宣告的是常數 (let),但由於 Student 是參考型別,屬性還是可以被修改。這是因為類別的實例是透過參考進行操作的。
以下是一個 struct 結構體的範例:
struct Employ {
// 屬性 (Properties)
var name: String
var age: Int
var position: String
var salary: Double
// 方法 (Methods)
func employInfo() -> String {
return "Name: \(name), Age: \(age), Position: \(position), Salary: $\(salary)"
}
// 方法範例:加薪
mutating func increaseSalary(by amount: Double) {
salary += amount
}
}
var employ1 = Employ(name: "Alice", age: 30, position: "Manager", salary: 5000.0)
print(employ1.employInfo())
// 輸出:Name: Alice, Age: 30, Position: Manager, Salary: 5000.0
print("Annual Salary: \(employ1.annualSalary())")
// 輸出:Annual Salary: 60000.0
employ1.updateSalary(by: 500)
print(employ1.employInfo())
// 輸出:Name: Alice, Age: 30, Position: Manager, Salary: 5500.0
這裡注意到,因為 Employ 是一個結構體,它是值型別。所以若要修改屬性(如加薪),必須用 mutating 關鍵字來標示這個方法。
Class 和 Struct 各有優勢。類別適合用於需要繼承、參考共享的場景;而結構體則適合用於需要頻繁複製值的情境。選擇使用 class 還是 struct,取決於具體的需求與應用場景。