iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
1

Swift 起源介紹

到底什麼是 Swift 語言,他又是幹嘛的呢?


Swift 是一款用來開發 iOS、macOS、iPadOS、tvOS、watchOS 的主要語言,在 2014 年 WWDC 大會橫空出世,並在 2015 年開放原始碼,目的就是為了取代掉 Objective-C,目前最新 Release Version 為 5.2.5

可以到 Swift 在 Github 上的專案,可以發現大部分的組成來自於 C++,也使用了一點點 Python,Swift 是一個強型別而且安全的程式語言。有別於 Objective-C,Swift 蘋果標榜的就是「快速、現代、簡單、安全」,Swift 也採用了很多安全的程式設計以及其他特有的功能,最重要的是頻果也希望可以讓完全沒有程式開發經驗的人可以容易上手,在程式碼的使用上也比較容易讀,在使用 Swift 更好上手。

Swift 基礎

Swift 除了有 Int、Double、Float、Bool 以及 String,還有一個強大的 Collection Type:Array、Set 和 Dictionary,如果你已經有一點點程式基礎的話,你應該對上述這些型別應該感到不陌生。

Swift 還提供了一個在 Objective-C 中找不到的型別,那就是 Tuple,你可以使用 Tuple 將多個資料( 可以是不同型別 )組合成一個複合值以用來存取。

再來就是 Swift 強大的核心功能之一,Optional Type,允許變數或是常數沒有值,並且回傳 nil,而且 Optional 適用於任何型別,可以讓程式碼不會因為接收不到值而造成錯誤以及 Crash,這對 Swift 來說是一個安全的程式設計模式。

Swift 也是一個 Type-Safe 語言,代表著你可藉由 Swift 語言,了解特定變數或是常數允許使用什麼型別來做存取。假使某個變數要求的是 String 型別,因為 type-safe 的關係,不允許你將非 String 型別資料指派給他,同樣的 Type Safety 也防止你將非 Optional 型別存入 Optional 型別的變數或常數,Type Safety 可以讓你在開發的時候及早發現錯並且解決它。


常數和變數 ( Constants and Variables )

常數或是變數的完整的宣告方式,是由名稱型別以及初始值所組合而成。

var helloMessage: String = "Hello, Swfit!"
let myScore: Int = 100

宣告 ( Declare )

在使用常數或是變數前,他們必須被宣告,你可以用 let 宣告常數;用 var 宣告變數。

常數一旦被宣告之後就不能再被更改,變數則可。

假設現在有兩個資料需要被使用,最大密碼長度和當前密碼長度,你可以這樣宣告:

let 最大密碼長度 = 10
var 當前密碼長度 = 0

因為 最大密碼長度 不會更改,可以被宣告為常數,然而 當前密碼長度 會隨著輸入的密碼長度而變動,所以被宣告為變數。

你也可以一次宣告多個常數或是變數在同一行

var name = "宜蘭人安竹", age = 18, 身高 = 179.9

型別註記 ( Type Annotations )

在開頭有提到:常數或是變數完整的組合就是將名稱型別以及初始值

當你在宣告變數或是常數時,可以加上型別註記來定義可以儲存的資料型別,我們可以在 helloMessage 這個變數,加上 String 的型別註記,說明他可以儲存整數型別的資料。

var helloMessage: String

所以我們也可以這麼說:「helloMessage是一個整數型別的變數」,而現在我們就可以安心設定任何字串到 helloMessage 變數。

helloMessage = "歡迎光臨“

你也可以一次註記多個變數。

var 國文分數, 數學分數, 理化分數: Int
var 姓名: String, 年齡: Int, 身高, 體重: Double

型別推論 ( Type Inference )

如果今天沒有特別的標註型別的話,其實 Swift 會透過型別推論找出合適的型別給變數。

從上面的例子來說明,針對 最大密碼長度 這個常數,如果宣告的時候沒特別標註型別,直接給定初始值 10,在編譯時 Swift 會依據給訂的初始值,推斷你想要設定這個常數為 Int。

/*
在 Xcode 中,按著 Option 鍵,點擊最大密碼長度這個常數
可以看到它被推斷為 Int。
*/

let 最大密碼長度 = 10

註解 ( Comments )

可以透過註解的方式,了解程式內容或是有哪些 Known Issues 待解,註解的文字在編譯的時候不會被執行。

單行的時候,可以使用 //

// 這是註解文字,編譯的時候會被忽略。
// 一天一蘋果。
// 荷包的錢錢遠離我。

但是如果註解很多行的時候,一行一行地加會很麻煩。

如果要進行多行註解的話有另外一種方式可以使用 **/* ... */**,在這區塊裡的文字都不會被執行。

/*
你看
這樣就可以
多行註解了
不是柱柱姐
是註解
*/

你也可以使用巢狀註解

/*
多行註解裡又包著一個註解

/*
大人啊
可以這樣包了又包的嗎
*/

答案是可以的
臨時要註解一大串程式碼,這個就很好用。
*/

分號 ( Semicolons )

不像以往 C 或是 Objective-C 語言,Swift 不需要在每段程式碼結尾加上分號,但是如果你想加的話,還是可以的喔。

let message = "我就是想加分號";

Swift 分號還有一個特點,如果想在同一行編寫多個單獨的程式碼,就必須加上分號。

let message = "我就是想加分號"; print(message)

從上面幾個 Swift 介紹可以發現,程式碼相對於 C 或是 Objective-C 比較易讀,而且 Swift 承襲了原本 Objective-C 的優點及特性:

  • 保留了,物件導向設計模式 (OOP, Object Oriented Programming)
  • 推出了,協定導向設計模式 (POP, Protocol Oriented Programming)

綜合這兩點,在程式使用上更加彈性,並提升效能,這在後續的篇章會再多加提到。


上一篇
Day 1 | 給我 30 天,給你一輩子:Swift 從零開始:序
下一篇
Day 3 | Swift 基本型別
系列文
給我 30 天,給你一輩子:Swift 從零開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言