iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

來寫看看app好了! Swift探索之旅系列 第 2

Day#02 Swift 101

前言

就小女子淺見,現在iOS開發有幾個選項:

  • React Native
  • Flutter
  • Swift
  • Objective-C

React Native & Flutter

前者的話,我目前沒有web app可以apapt成mobile app,而且根據個人經驗,寫前端的經驗從來都不是很順利XD。
2017被Google released的Flutter似乎是越來越主流的選擇,不過也因為很新的關係,我擔心線上資源較少。

Swift vs. Obj-C

根據OBJECTIVE C VS SWIFT COMPARISON這部影片,swift最主要的好處就是語法比較輕量、直觀,雖然自己是學c/cpp出身的,或是說,就是因為是學c/cpp出身的XD所以最後選擇學習Swiftヽ(‘ ∇‘ )ノ~~

Get Started with a playground

Variable & Collection

var - changable 宣告可改變值的變數
let - constant 宣告常數

Variable

let str: String = "Hello"

basic variable type: String, Double, Float, Boolean

Array

var integers = [Int] ()

常見方法: append(+=), 使用index取值, count

Set

by白話的數學定義,就是一堆沒有編號、沒有重複的資料

var chars = Set<Character>()

常見方法: insert

Dictionary

var dict = [Int: String] ()
dict[2] = ["aaaa", "cccc"]

print(dict[2]?[1]) // Optional("cccc")

第4行印出的Optional就是變數值可以為nil

Optional?

更精準的說,optional有兩個值: nil, some

像是以下的程式碼會出現error,因為無法確保str有值,也就是說只有string可以append string

var str: String?

var newStr = str + "suffix"

因此可以加上!去強制取值,不過記得還是要先判斷是否真的有值可拿 :arrow_down_small:

if str != nil {
    var newStr = str! + "suffix"
}

換個寫法,也可以直接使用一個常數變數去接,接得到的話就代表有值.
這邊使用strVal接住str的值,並使用if去判斷strVal是否有接到值,若有的話才進行append :arrow_down_small:

if let strVal = str {
    var newStr = strVal + "suffix"
}

...

在新版的swift當中,這種if let的寫法又有了新的改革(!) (~ ̄▽ ̄)~\
我們可以使用guard來取代if let,我自己的理解有點像是確保的語意,頗析一下的話,其實也是一個if/else的結構。

func printMeaningOfLife() {
    guard let name = getMeaningOfLife() else {
        return
    }

    print(name)
}

(以上的例子出自於這篇文章: When to use guard let rather than if let)

Objects

Class

以下是一個簡單的class範例,包含屬性與方法

class FastCar {
    var topSpeed: Int
    
    init (topSpeed: Int) {
        self.topSpeed = topSpeed
    }
    func getTopSpeed () -> Int {
        return self.topSpeed
    }
}

Inheritance

以下是class繼承的簡單範例,BigFamilyCar繼承FamilyCar、而FamilyCar又繼承Car。因此BigFamilyCar共有3個屬性,其中兩個是繼承來的。

class Car {
    let numWheels: Int
    
    init(numberWheels: Int) {
        self.numWheels = numberWheels
    }
}

class FamilyCar : Car { // numWheels, numDoors
    let numDoors = 5
}

class BigFamilyCar : FamilyCar { // numWheels, numDoors, size
    var size = "large"
}

結語

這篇文章就到這邊了~雖然內容極其簡單,但基於前一篇標題的精神,還是決定先打好微小的基礎!

若有任何建議或是指教,歡迎留言◦°˚(*❛‿❛)/˚°◦

參考資源

Swift的問號與驚嘆號:可有可無的 Optional


上一篇
Day#01 合抱之木生於毫末
下一篇
Day#03 初始專案
系列文
來寫看看app好了! Swift探索之旅30

尚未有邦友留言

立即登入留言