Swift基本語法

Astrid
8 min readJul 31, 2021

classes vs structures

named type, compound type

Naming Convention

Style

Ternary condition operator三元判斷式

用tuple組合

Array,Dictionary,Set

continue, break

classes vs structures

Named Types, Compound Types

Named Types:Have names when they’re defined. Like Structures, Classes, Enumerations, Protocols.

Compound Types:Unnamed! Defined by the types they contain.

例如:

(3, 17, 9) 它的型別(type signature)就是(Int, Int, Int)、

(3.14,(32,”hi”)),它的型別就是(Double,(Int,String))。

Naming convention

var let 名詞 represent nouns

function represent tasks or actions use verb to a function name

Naming functions or methods for the values they return.

If there is no return value, use the verb to describe what does this function do.

Or you can add a verb before the noun of the return value.

Staying consistent.

Style

A set of rules to keep code consistent.

Ternary condition operator三元判斷式

如果condition是true的話,就用冒號前的值,false就用冒號後的值。

Ternary condition operator二元判斷式

用tuple組合

可以用tuple把多個值組合起來,assign給變數或常數。line1

也可以倒過來,用tuple一次宣告多個變數、常數。line6

如果一整組的值當中,有想要忽略的值的話,直接用_不將那個值宣告。

Array

Array 一次新增多個物件

不用一個一個appemd。

直接把多個物件組合成array,加回要加入的array即可。

+= []

擷取Array中的某段

當用line7的方式,取pastries index1…3的物件,並存入arraySlice時,它算是一段擷取,所以index還是跟pastries的一樣。所以雖然arraySlice中只有pastries index1…3,這1…3在arraySlice同樣是index1…3。

於是要取arraySlice[0]時,會index out of range。

擷取Array中的某段,並存為新Array

跟以上一樣的做法,但如果在前面加上Array並用小括號把pastries index[1…3]包起來,就會存出一個新的Array,他的index會從0算。

用contains檢查是否有某物件

把原有物件換掉

就算只指定要換掉index0,1,但加入了三個物件,也只有index0,1被移除。

swap交換物件

找出開頭是c的物件

startIndex

Dictionary

在一個dictionary中,key一定要是unique,value可以重複。

用dictionary取得的值一定是optional。

可以用??來設定如果無值的話,default value 是什麼。

新增、更改 value

不管是新增或更改,都是用update的概念在想。如果本來沒有那組key-value的話,就會新增;如果有的話,就會更新資訊。

remove整組key-value

因為dictionary無法儲存沒有值的value,所以當value無值,key也會一起被消滅。有兩種方法可以remove key-value。

.removeValue(forKey:_)方法。特別的是使用這個方法會return 被移除的值。

或直接指定某個key,把他的value設為nil。

取key 與 value

Set

Set內不會有重複的值。

宣告Set的方式

var someSet : Set<Int> = [1, 2, 3, 1]

break

只能在loop中使用。

跳出loop不繼續執行下一輪。

continue

只能在loop中使用。

對特定物件做特別處理。

以下為例,每個被for in loop跑過的物件都會被印出來,但因為我們設定了遇到Friday要印出I am in love.所以到了Friday,它只會印出I am in love,而不會印出跟其他物件一樣的內容。

使用continue

一樣的程式碼,如果不用continue的話,Friday會印出I am in love,但依然會印出跟其他物件一樣的內容。

for in 配上 continue

有一棟大樓,他的11–15樓要做飯店,一層樓有4個房間。我們要把它所有房號印出來。

狀況一:居然一層樓只買了三張床,只好先把每層樓的1號房取消開放,請印出所有可住宿房號。

使用 continueroom ==1 做特殊處理,處理的方式是什麼都不做,所以直接只打continue即可。

狀況二:13樓鬧鬼!只好先把13樓全面取消開放,請印出所有可住宿房號。

在外面那層跑floor的loop設定,遇到13樓要做特殊處理。

狀況三:12樓的3,4號房發生命案,又要取消開放了。請印出所有可住宿房號。

於是我們在內層跑room的loop多加一個條件,當遇到12樓3房,就直接跳出,跑13樓的loop。

沒想到,他只跳過了12–3,12–4還是有被印出來,代表他continue之後,繼續跑room那層loop,而不是照我們本來想的去跑floor那層loop。其實有方法可以直接指定它contine是要繼續跑哪一層loop的。

loop其實是可以被加上標籤的!直接在前面加上標籤名,再加上冒號即可。現在我們可以直接在continue後面加上希望它接下來去跑哪一個loop。

這樣我們就成功忽略12–3,12–4了!

用for in loop 印出矩形

5行、10列

要印出一排10顆星星,印五排的意思

--

--