iOS開發-swift基礎學習一

swift中文文檔gitbooks地址:https://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/  

1、常量與變量的定義

在swift中,我們用let來定義一個常量,用var來定義一個變量,例如:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. let a=10;  
  2. var b=12;  

發現沒有,我們不需要爲其指定類型,編譯器會根據變量的值來確定變量的類型;當然,如果沒有給變量設定初始值,就應該聲明變量的類型,如:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. var b:String;  
  2.   
  3. b="adc";  
當然,後面的分號可以不要,不過我還是給加上了,這樣代碼多了,結構會清晰些。。。Swift中可以使用幾乎任何字符來作爲常量和變量名,包括Unicode,但是名稱中不能含有數學符號,箭頭,無效的Unicode,橫線-和製表符,且不能以數字開頭,儘管數字可以包含在名稱裏。一旦完成了聲明,就不能再次聲明相同名稱的變量或常量,或者改變它的類型。例如:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. let 王子="wangzi";  
  2.   
  3. var 大人="daren";  
  4.   
  5. var 22="2222";  //包含數字,錯誤  
  6.   
  7. var _a="a";  
  8.   
  9. var 王2="2";  
2、輸出常量與變量

Swift使用 println()函數來輸出常量或變量,當然print函數也一樣,println帶換行,例如:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. println(a);  
  2.     
  3. print(b);  
println函數還可以格式化輸出一些日誌信息,就像是Cocoa中NSLog函數的行爲一樣,可以包括一些常量和變量本身。Swift在字符串中插入變量名作爲佔位符,通過\()來表示,例如:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. var b:String;  
  2. b="adc";  
  3. println("我是\(b)");  
輸出:我是adc

3、Int類型和UInt類型

我們知道在不同的平臺下,int類型的長度不同,在OC中,我們可以用NSInteger來表示一個int類型,它可以根據所處平臺來定義int的長度

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64  
  2. typedef long NSInteger;  
  3. typedef unsigned long NSUInteger;  
  4. #else  
  5. typedef int NSInteger;  
  6. typedef unsigned int NSUInteger;  
  7. #endif  
在Switf中,我們可以用Int來定義一個int類型,一般來說,編程人員在寫代碼時不需要選擇整數的位數,Swift提供了一種額外的整數類型Int,是和當前機器環境的字長相同的整數位數在32位機器上就表示32位長度,在64位機器上就表示64位長度。Swift還提供了一種無符號類型UInt,同理也是和當前機器環境的字長相等。
[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. var cc :Int=20;  

Swift是一種類型安全的語言。類型安全就是說在編程的時候需要弄清楚變量的類型。如果您的代碼部分需要一個字符串,你不能錯誤地傳遞一個整數類型。

因爲Swift是類型安全的,它會在編譯的時候就檢查你的代碼,任何類型不匹配時都會報錯。這使得編程人員能夠儘快捕獲並儘可能早地在開發過程中修正錯誤。

類型檢查可以在使用不同類型的值時幫助避免錯誤。但是,這並不意味着你必須指定每一個常量和變量所聲明的類型。如果不指定你需要的類型,Swift使用類型推導來指定出相應的類型。類型推導使編譯器在編譯的時候通過你提供的初始化值自動推導出特定的表達式的類型。

類型推導使Swift比起C或Objective-C只需要更少的類型聲明語句。常量和變量仍然顯式類型,但大部分指定其類型的工作Swift已經爲你完成了。

4、類型別名

我們在其他語言比如C/C++、OC中經常會用到typedef,用來爲一種數據類型定義一個新名字,在Swift中用typealias來現有的類型定義可替代名稱,例如:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. typealias MyInt = Int;  
  2.   
  3. var dd:MyInt;  
5、元組類型

元組,這個在OC中是沒有的,它可以將幾種數據類型組成一個元素,數據類型可以一樣,也可以不一樣,用()表示,例如(Int,String,Int)等表示;編程人員可以隨意地創建自己需要的元組類型,比如 (Int, Int, Int), 或者(String, Bool)等。同時組成元組的類型數量也是不限的。例如:

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1.   let httpStatus=(404,"Not Found");  
  2.     
  3.   var person : (Int,String) = (23,"rose");  
  4.     
  5. //  var person2 : (Int,String) = (age :23, name :"rose");   //在明確指定元素類型的情況下不能加上元素名稱  
  6.     
  7.   var person3=(age :23, name :"rose");  
  8.     
  9.   //可以使用下劃線_忽略某個元素的值,取出其他元素的值  
  10.   var person4 = (20,"jack");  
  11.   var (_, name) = person4;  
  12.   
  13.   println(httpStatus);  
  14.   println(person.0);  
  15.   println(person3.age);  
  16.   println(name);  
6、可選類型和強制解包

什麼是可選類型,可選類型就是這種類型的值要麼存在,並且等於某某值,要麼就是不存在。比如在某個字符串中查找某個字符,要麼存在這個字符,要麼不存在這個字符

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1.         //可選類型的格式:類型名?  
  2.         var kIndex :Int?;  
  3. //        問號?表明kIndex的值是可選的,可能是一個Int,也可能值不存在  
  4. //        kIndex的值要麼是Int類型,要麼是nil(nil代表值不存在)  
  5. //        kIndex默認就是nil,因此上面的語句相當於  
  6.         var kIndex :Int? =nil  

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. //        不能直接將可選類型賦值給具體類型  
  2. //        比如不能將Int?類型直接賦值給Int類型,因爲Int?都不確定有沒有整數值  
  3.         var people:Int?=10;  
  4.           
  5.         var people2:Int=people;  
上面那樣表示錯誤,但反過來可以,你可以把int類型值賦給Int?類型,如果要讓上面表達正確,我們可以強制解包,用!表示,
[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. var people:Int?=10;  
  2.   
  3. var people2:Int=people!;  
這表示我確定變量people確實是存在10這樣一個值的,注意如果可選類型的值不存在,仍然進行強制解包,會報一個錯誤
[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. var num :Int?  
  2. var numValue =num!// 這行會報錯  
我們可以用if條件語句來判斷一個可選類型的值是否存在,

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. let nums = "100".toInt();  
  2.   
  3. if(nums)  
  4. {  
  5.     println("num的值是\(nums!)")  
  6. }else  
  7. {  
  8.     println("num的值不存在")  
  9. }  
默認情況下:如果想將可選類型的值賦給具體類型,比如將Int?的值賦給Int類型,需要使用感嘆號!進行強制解包 ,我們可以聲明成隱式解包,
[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. var num :Int! =20  
  2. var numValue :Int =num // 自動解包,不用再使用! 進行強制解包  
  3. // num是被聲明爲隱式解包的可選類型Int!  
發佈了32 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章