天天看點

Swift學習筆記2——基本類型和基本運算

基本類型

其實和C差不多,也就是那幾個。多出來的是Tuple和可選類型這兩個概念

數字類型

這裡記錄一下每個類型的大小。

Int 在32位機器上是Int32 ,在64位機器上是Int64. 除了Int之外,還有Int,Int8,Int16,Int32,Int64.

UInt在32位機器上是UInt32 ,在64位機器上是UInt64.   除了UInt之外,還有UInt8,UInt16,UInt32,UInt64.

Double  64位浮點數

Float  32位浮點數

Swift不支援數字類型之間的自動轉換。必須顯式手動轉換。

var i: Int = 2_000   //這個表示2000
var d: Double = 5.3
var e = d * Double(i)
           

不同進制的字首

十進制       沒有

二進制        0b

八進制        0o

十六進制     0x

科學計數

1.25e2 代表  1.25乘上10的2次方

0xFp2  代表   15乘上2的2次方

typealias 關鍵字,用來個類型起别名

typealias ii = Int8
var mm = ii.min //這裡的ii代表了Int8
           

Boolean 類型

Swift和java一樣,對boolean類型是強要求的,不能在if裡面傳一個整形用于判斷。

新類型——元組(Tuple)

其實就是一群資料組合,可以将其解出來輸出。注意的是tuple不隻是兩個元素,你可以自己擴充成多個元素。

var menu = ("apple", 20)  //定義一個Tuple
var menu2 = (name: "banana", price:10)  //可以在定義的時候指定元素名字
let (name,price) = menu   //解Tuple,如果某個元素不想要的話,用 _ 代替
print(name, price)   //輸出  apple 20
print(menu.0,menu.1)  //不解Tuple直接輸出
print(menu2.name,menu2.price)  //利用元素名字解Tuple
           

可選類型(Optionals)

當一個方法可以傳回一個對象的時候,它有可能傳回一個空值。比如将字元串轉換為數字的方法。為了處理這種情況,有了可選類型。

可選類型表示一個資料,它可能有值,也可能為空。基本文法是在類型的後面加上問号 ?

比如下面的代碼

var str:String
print(str)  //這裡報錯說str沒初始化
           

但是如果将str改為可選類型,那麼這就可以輸出了

var str:String?
print(str)  //輸出 nil
           

那怎麼将一個可選類型轉換為對應的類型呢?這裡有個強制解包的概念,使用 ! 對可選類型解包。請看下面代碼。 強制解包有個注意點,就是如果這個可選類型是nil的話,那麼強制解包的語句會在運作時報錯。

var str:String? = "fe"
var s = str! //将str解包為s,但是如果str沒有指派的話,那麼這句會在運作時報錯
print(s)
           

為了解決強制解包的時候,可選類型可能為nil的問題。if語句裡面多了一個 Optional Binding 的概念。就是将可選類型解包後判斷是否為nil,然後執行不同的分支代碼

//因為沒給str指派,是以輸出  str為空
var str:String?
if let s = str {
    print("str有值")
} else {
    print("str為空")
}
           

        如果在程式設計中,我們可以確定可選類型一定不為nil的,那麼每次要将可選類型解包都要加個 !,很麻煩。是以有了隐式可選類型,它是用 ! 代替了 ? 号。然後在需要将可選類型轉換為對應類型的時候就不用加 ! 了

var str:String! = "string"
var s = str
           

基本運算

一些和C完全一樣的基本運算如下

加減乘除,負号,自增(++)自減(--),+=等, 判斷大小之類(==,!=,>=...),三元運算符,邏輯運算(!,&&,||)

不一樣的運算符

取模%,在C中,隻能對整形進行運算,Swift中可以對浮點數進行運算。結果就是多出來的那部分

比如 7.1%2.5  得到2.1,因為7.1可以最多減去2個2.5,然後剩下2.1

範圍運算符 ... 和 ..< 這兩個運算符可以用在for裡面。比如

//輸出 1 2 3    包含最後一個元素3
for i in 1...3 {
    print(i)
}
//輸出 1 2  不包含最後一個元素3
for i in 1..<3 {
    print(i)
}
           

單範圍運算符

對于下标運算可以這樣用。

let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names[2...] {
    print(name)
}
// Brian
// Jack
 
for name in names[...2] {
    print(name)
}
// Anna
// Alex
// Brian
for name in names[..<2] {
    print(name)
}
// Anna
// Alex
           

??

這是一個二進制運算符,例子 a ?? b

它的意思是:如果可選類型a不是nil,那麼解包a并傳回解包值,如果a為nil,那麼傳回b

相當于 a != nil ? a! : b