Swift 程式語言 — 基礎概念(1) — 基本介紹 & Array

讓我們來奠定一些 Swift 程式語言中的基礎概念。

Jeremy Xue
Jeremy Xue ‘s Blog
9 min readNov 29, 2018

--

前言:

在準備開始研讀 Swift 語法之前,我們先來科普一下 Swift 的基礎概念吧,這些概念對於一些可能非本科系或是第一次加入程式設計的讀者,看了這些基礎概念,可以對之後練習程式語言時有一定的理解,也讓之後開始閱讀其他的語法(迴圈、判斷式)有幫助。

Tips:在閱讀語法的時候,同時也可以開啟 Xcode 中的 Playground 實際練習、玩玩看,也許能加強你對語法的概念。

⎮ 概論

Swift 是開發 iOS、macOS、watchOS 和 tvOS 應用程式的新程式語言。即使如此,如果你有在 C 和 Objective-C 的開發經驗,那麼 Swift 中會有許多部分讓你感到熟悉。

Swift 提供了自己所有基本的 C 和 Objective-C 類型的版本,包含整數 Int、浮點數 Double 和 Float、布林值的 Bool 以及文本資料的 String。除此之外,Swift 也提供三個主要集合類型的強大版本,陣列( Array )、集合( Set )以及字典( Dictionary )如同 Collection Type 中敘述的。

跟 C 語言一樣,Swift 使用變數來儲存和透過標識名稱來參考值。Swift 還廣泛地使用其值無法被更改的變數,這些被稱之為常數,Swift 中的常數比 C 語言中的常數更為強大,當需要使用一個不會更改的的值的時候,在整個 Swift 中使用常數會讓你的程式碼更安全、更清晰的表達你的意圖。

除了熟悉的類型以外,Swift 引入了 Objective-C 中沒有的高級類型,例如元組( Tuples )。元組能夠讓你創建和傳遞值的組合。你可以使用元組作為一個函數的單個複合值,去回傳多個值。

Swift 也引入了可選類型( Optional ),用來處理缺少值。可選類型可能表示「 這裡有一個值,它等於 x 」或是「 這裡沒有任何值 」。使用可選類型處理類似於 Objectvie-C 使用 nil 指針的方式,但是他們適用於任何類型,而不僅僅是個類別。可選類型不僅比 Objective-C 的 nil 指針更安全、更具表達性,他們也是許多 Swift 中最強大功能的核心。

Swift 是一種類型安全的語言,這意味著 Swift 能夠幫助你清楚的表示程式碼中使用的值的類型。如果你有部分的程式碼需要 String,則類型安全性會阻止你錯誤的將它傳遞給 Int 。同樣的,類型安全性會防止你意外的將程式碼中可選的 String 傳遞給非可選的 String。類型安全可以幫助你在開發過程中提早獲取和修正錯誤。

⎮ 常數和變數

常數和變數會將名稱與特定類型的值關聯起來,常數的值一但設置後就無法被更改,而變數再之後可以被設置成不同的值。

常數和變數必須在使用它們之前宣告、聲明( declared ),使用 let 關鍵字來宣告常數,使用 var 關鍵字來宣告變數。

讓我們使用 Playground 運行看看,賦值給常數以及變數:

錯誤提示:無法賦值:name 是由 let 宣告的常數

你可以在一行程式碼中宣告多個常數或是多個變數,透過 , 分隔:

如果程式碼中的儲存值不會被更改,請總是使用 let 關鍵字來將它宣告為常數,只有當儲存值會變更的時候將它宣告為變數。

⎮ 類型標註

你可以在宣告常數或變數時,提供一個類型標註,可以清楚常數或是變數儲存值的類型。透過在常數或變數名稱後放置冒號 : ,後面加上一個空格 以及要使用類型名稱來編寫類型標註。

這邊我們來示範如何宣告有類型標註的值:

冒號的意思類似於 xxx是…類型,因此上面的程式碼我們可以這樣解讀:

如果說我們將它的類型標註為 String ,表示這它可以被存入任何 String 類型的值, 也就說是如果它標註為這個類型,這個類型的值就能被儲存。

讓我們打開 Playground 賦值給 name 以及 number 這兩個不同類型的值:

賦值 String 值 “Hello” 給 name;賦值 Int 值 666 給 number。

如同上面我們在宣告一連串的常數或變數一樣,我們同樣也可以在同一行程式碼中定義相同類型的多個相關變數,一樣使用 , 分隔,在最後一個變數名稱後加上一個類型標註:

你很少會需要去編寫類型標註這件事,如果你在定義常數或是變數時提供初始值,則 Swift 幾乎總是能推斷出該常數或變數的類型,如類型安全和類型推斷中所描述的。

所以用上面的例子來說,我只需要在一開始提供初始值,Swift 就能推斷出這個常數或是變數的類型,按住 option 後點擊該常數或變數即可查看這個值的類型:

⎮ 命名常數和變數

常數和變數命名幾乎包含所有的字元,包括 Unicode 的字元:

但是常數和變數名稱其中不能包含過空白字符、數字符號、箭頭、保留的 Unicode 或連線和製表符號。同時它們也不能使用數字開頭、雖然數字可以包含在名稱的其他地方。

一旦聲明了一個類型的常數或變數,就不能再使用相同的名稱定義,或將其更改為其他的類型。你也不能將常數改為變量或是變量改為常量。

如果你需要給一個常數或變數與 Swift 關鍵字相同的名稱,使用反引號(’)括起來作為名稱。但是,除非你沒有其他選擇,否則請避免使用與 Swift 相同的關鍵字作為名稱。

⎮ 輸出常數和變數

你可以使用 print 方法來印出常數和變數的當前值,讓我們使用 Playground 來測試一下:

其實 print 也有更多的用法,我們可以看到有許多不同 print 的方法:

許多不同 print 的方式

我們可以選擇第二個 print(items:,separator:,terminator:String) 這個方式,item 一樣放我們想要印出的值,separator 每個值的間隔符號,而terminator 就是印出結束點想要印出的文字,讓我們嘗試一次吧!

  • 在印完的結果最後加上 @Jeremy Xue 的字串,並且印出結果。
  • 在預設情況下,印出多個值結果的時候的間隔會是空白的:
  • 我們可以透過上述方式在 separator 加入“,” 作為他們的分隔符號:
  • Swift 也有支援 \n 這種斷行方式,所以可以在 separator 輸入 “\n”

Swift 還使用字串符插值(String interpolation)的方式將常數或變數作為一個佔位符(placeholder)加在一段更長的字串中,並且提示 Swift 去將它更換為這個常數或變數的當前值。使用 “\(你的常數或變數名稱)” 將它轉義:

⎮ 註解

使用註解去包含程式碼中不會執行的文字,作為自己或是他人的一個筆記或是提醒。當你在編譯或是運行程式碼時,Swift 的編譯器會自動忽略註解掉的部分。

Swift 中的註解非常類似於 C 語言中的註解。單一行的註解方式我們使用 // 作為開頭,此行程式碼不會被編譯:

想要註解多行程式碼的話我們使用 /* 作為起始點,使用 */ 作為結束點:

與 C 語言註解不同,在 Swift 中可以再多行註解中嵌套在其它多行註解。你可以透過第一個多行註解區塊中加入第二個多行註解來編寫嵌套註解。

嵌套的多行註解可以讓你非常快速且容易的去註解一個大區塊中的程式碼,即使程式碼中已經有包含許多多行註解。

⎮ 分號

與其他語言不同,Swift 不需要你去在每段程式碼後加上分號 ;,但是如果你想要也是可以這麼做。但是,如果想要在一行中編寫多個單獨的語句,這個時候我們就需要使用分號。

後記:

那麼我們這次 Swift 中的基本概念的介紹就到這邊,稍微讓大家理解一些 Swift 中如何去宣告且命名一個常數或變數,也了解如何賦予它類型或是透過類型推斷來判斷其類型,也學會如何輸出結果,之後編寫程式碼的時候,常常會需要使用 print 來印出運行結果,方便開發的時候 Debug,那麼我們這次教學就到這邊結束了。

--

--

Jeremy Xue
Jeremy Xue ‘s Blog

Hi, I’m Jeremy. [好想工作室 — iOS Developer]