close

最近某君在學習iOS編程,

由於還是初學者,

有些東西還沒有整理得很清楚,

但鑒於對自身記憶力的不信任,

還是在這裡記錄一下先。

所以內容以筆記為主、教學為輔(現在也教不出個什麼所以然來

如果有需要可以先參考看看,

(更適合那些有編程基礎,作為對照手冊使用)

我在事後應該也會努力完善的(吧⋯⋯)

---

如果有編程底的話,

應該對基本資料類型不會陌生,

由於某君學過多門語言(VB、PASCAL、C、JAVA、PYTHON等),

又學而不精,

所以有一些名詞可能會不小心混用了,

更無法一一列舉Swift與其他語言的異同,

還望見諒。

 

Swift區分大小寫,

一樣有字串、整數、浮點數、Double、邏輯等幾種類型,

沒有硬性規定事先宣告,

以第一次賦值的值的類型作為變數(/常數)的類型。

但需要事先說明其為變數(Variable,var)還是常數(Constant,let)。

 

Print()

為了方便理解下面的程式,

順便介紹一下print()這個方法。

print("要印的文字") /變數 /常數 等

如果要印出一句文字和變數結合的句字也很方便,

只需在變數前用\作分隔就可以了,例如:

print("第一句是\(x),第二句是\(x1),第三句是\(x2)")

這點和python很像啊,如果有會python的人可以比較一下:

print("第一句是{},第二句是{},第三句是{}".format(x,x1,x2))

 

字串String (String)

  程式碼 解釋
宣告 var str:String 宣告了一個名為str的字串變數。
宣告+賦值 let str = "Hello, playground"

宣告了一個名為str的字串常數,並賦值為Hello, playground,其值無法再變更*。

宣告+賦值 var str = ""

宣告了一個名為str的字串變數,並賦其初始值為空字串。

宣告為Optional var str:String? 宣告了一個名為str的Optional字串變數*。

*宣告為常數的其值無法再變更:

image

感受一下,應該很容易就能理解了

image

布爾邏輯Boolean (Bool)

  程式碼 解釋
宣告 var b:Bool 宣告了一個名為b的邏輯變數。
宣告+賦值 var b=false

宣告了一個名為b的邏輯變數,並賦其初始值為false。

宣告+賦值 var b=true

宣告了一個名為b的邏輯變數,並賦其初始值為true。

宣告為Optional var b:bool?

宣告了一個名為b的Optional邏輯變數*。

邏輯只有true和false兩種結果,和電腦的大邏輯是一模模、一樣樣的,

如果對邏輯不太理解的話,可以參考一下我前篇[邏輯判斷]的部分,

或者多看幾個例子就會懂了。

image

 

整數Integer(Int)、浮點數Float (Float)、Double(Double)

三個數值類型就放在一起介紹吧。

Int就是整數啦,

Float和Double就是有小數點的數,其中Float是較短的、Double是較長的 XD,

就是一個是1.5,另一個是3.1415926,醬紫,

具體差多少個位,懶懶的某君不想深究,

想深究的自己查去。

  程式碼 解釋
宣告 var x:Int 宣告了一個名為x的整數變數。
宣告+賦值 let PI = 3.14 宣告了一個名為PI的Double常數,並賦值為3.14。
宣告+賦值 var y=0.0

宣告了一個名為y的Double變數,並賦值為0.0*。

宣告為Optional var x:Float? 宣告了一個名為x的Optional浮點數變數*。

*0.0按道理來說應該是Float類型,但Swift默認宣告為Double類型,也就是說只要不特別宣告,就不會有Float類型了。

如果不確定變數類型,可以長按Option+點選變數就以得出以下畫面啦。

image

再來感受一下吧

記得,不同類型的無法做運算哦

如下圖: x:Int x2:Double

Int和Double無法相加,會出錯的,

image

如果一定要相加,

只可以將其中一個強制轉換成另一個的類型,

才能運算哦。

怎麼可以強制轉換呢?

就是用Double(x), Int(x), Float(x)方法,

將要轉換的變數放在括號中就可以強制轉換成相關類型了。

image

但既然說是強制,

感覺就是令人不太放心呢,

如果Line 5的x=16被注釋了、就是x沒值的狀態,又會發生什麼事呢?

如果某君有16個1元,要換成1毛的,當然沒問題,

但如果本來就沒有錢,不管變毛、變分,怎麼強制還是變不出錢來的啊。

為了讓人清晰分辨這種沒錢裝有錢的情況,Swift提供了一個空值nil供開發者使用(相當於平時的null),

這個時候就需要提到Optional啦,

上面幾個類型都有宣告成Optional的部分,

那到底怎麼用呢?

 

陣列(Array)

陣列就是將幾個同類型、有關聯的變數統一宣告,

省下逐一宣告的麻煩。

  程式碼 解釋
宣告 var a:[Int] 宣告了一個名為a的整數變數陣列。
宣告+賦值 let a=["1","2","3"] 宣告了一個名為a的字串常數陣列,並賦值為"1","2","3"

幾個陣列的方法:

var a=["1","2","3"]

a.insert("k",at:1)      //.insert(要加入的值, at: 在第幾位) result: a=["1","k","2","3"]

a.remove(at:0)       //.remove(at: 刪除第幾位的值) result: a=["k","2","3"]

a.first                  //取出第一個值 result: "k"

a.last                  //取出最後一個值 result: "3"


*Optional ?!

Optional的符號是?

把變數宣告為Optional後,變數在沒有初始值時默認為nil,

image

需要注意的是Optional也算是一個類型,

所以Optional的Int和普通的Int也不能運算。

image

所以這時就需要用到強拆包裝(!),也就是?的反向過程。

image

同樣的,強拆也是有上面的意外滴!

和上述的一樣,如果x是空值的話又會出事,

那Optional的意義在哪呢?

其實Swift提供了一種安全拆開包裝(Line 6~12)的方式:

image

Line 6: let temp=x  意思是x有值嗎?有的話就賦值給常數temp (這裡因為temp只用一次,不需要再改值,就可以直接宣告為常數了)

換句話說,如果x有值就會傳給temp,同時會做Line 8條件成立的部分,

如果x是nil的話就不會傳給temp,同時會做Line 11條件不成立的部分。

 

P.s. 其實Optional真的是Swift一個很重要的部分,超級複雜的,

上面只是簡單說一下,如果詳細的,某君還沒完全搞清楚啦⋯⋯

之前在網上發現了一篇超好理解的,可以移步去看看:

https://www.appcoda.com.tw/swift-optional-intro/

arrow
arrow

    4ngus 發表在 痞客邦 留言(0) 人氣()