iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
0
Software Development

iOS App 實作開發新手村系列 第 7

Day7 類別與結構

20190923

前言

今天要介紹的是Swift中的類別與結構。
現在,我們馬上開始!

如何建立playground,請參考Day4的文章
https://ithelp.ithome.com.tw/articles/10217428

類別 class

在物件導向的語言中,類別算是基礎之一,
今天我們透過程式碼來對類別做一些基礎的介紹。

類別宣告

// 類別宣告首字大寫
class Human {
    var name: String
    var age: Int = 18
    // 建構子
    init(name: String) {
        self.name = name
    }
}
  • 可以看到Human這個類別,有兩個屬性name & age
  • 如果沒有給初始值,就必須在init()建構子中初始化

接者我們來看看繼承的概念

class Man : Human {
    var height: Int
    var weight: Int
    
    init(name: String, height: Int, weight: Int) {
        self.height = height
        self.weight = weight
        super.init(name: name)
    }
    
    func play() {
        print("Learn Swift with play playground.")
    }
}
  • 我們有一個繼承Human的Man類別,並加入height & weight 兩個屬性

  • 由於沒有給預設值,所以我們必須在建構子中宣告

  • 最後再用super.init()來呼叫父類別的建構子

  • 這邊要注意子類別的屬性要先初始化後,才能呼叫super.init(),不然會出現如下錯誤

  • 並新增一個play()方法,關於func方法將會在後續文章進一步介紹

結構 struct

結構與類別有很多地方很類似,但是使用的場景與細節還是不同。

我們一樣來看看程式碼

struct Person {
    var name: String
    var age: Int
}
// 自動產生memberwise initializer
let person1 = Person(name: "mike", age: 18)

//struct SuperMan : Person {}

// 由於struct是value type, 因此person2的變更,不會影響person1
var person2 = person1
person2.name = "Peter"
print("person1.name: \(person1.name)")
print("person2.name: \(person2.name)")
  • struct無法被繼承,類別可以

  • struct會自動產生memberwise initializer

  • struct是value type, class 是 reference type

總結

在今天的文章裡,我們介紹了結構與類別,也介紹了類別的一些基礎觀念,例如繼承...等等,想要進一步學習的讀者,可以參考文章後面的延伸閱讀。
明天Day8的文章,預計將會介紹Swift中的func方法,今天的內容就到這邊,感謝讀者們的閱讀。


Github:

https://github.com/chiron-wang/IT30_11

參考資料與延伸閱讀

  1. 彼得潘的 Swift iOS App 開發問題解答集
    https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86

  2. iOS 13 & Swift 5 - The Complete iOS App Development Bootcamp - Angela Yu
    https://www.udemy.com/course/ios-13-app-development-bootcamp/

  3. 深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
    https://www.udemy.com/course/iphone-swift4/

  4. 心智圖軟體Xmind
    https://www.xmind.net/

  5. 彼得潘的Swift程式設計入門
    https://www.tenlong.com.tw/products/9789572246573

5.《The Swift Programming Language》正體中文版
https://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/chapter2/01_The_Basics.html#floating-point_numbers

  1. Apple Developer Document
    https://developer.apple.com/documentation/swift/double

  2. Apple文件的 Initialization參考
    https://docs.swift.org/swift-book/LanguageGuide/Initialization.html

  3. Swift 筆記 - Initialization 的規則:designated init 和 convenience init 的用法
    http://jason9075.logdown.com/posts/285685-swift-note-initialization-rules-convenience-and-designated-initializer-usage


上一篇
Day6 布林與字串介紹
下一篇
Day8 function(func)的基本介紹
系列文
iOS App 實作開發新手村36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言