iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
Mobile Development

IOS的打怪升級之路系列 第 6

鐵人賽第六天 class與struct

  • 分享至 

  • xImage
  •  

說明

class類別 struct結構

類別及結構有很多相同的地方,可以用於 屬性 方法 下標 生成初始化值
也有一些結構沒有,類別有的功能,以下舉例:繼承(inherit) 解構器(deinitializer) 型別轉換 參考計數

宣告class範例

以下是一個 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 類別

以下是如何實例化一個 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 結構體的範例:

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
    }
}

使用struct

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 關鍵字來標示這個方法。

結語

ClassStruct 各有優勢。類別適合用於需要繼承、參考共享的場景;而結構體則適合用於需要頻繁複製值的情境。選擇使用 class 還是 struct,取決於具體的需求與應用場景。


上一篇
鐵人賽第五天 func是function
下一篇
鐵人賽第七天 xcode創建專案
系列文
IOS的打怪升級之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言