標籤:
http://blog.csdn.net/kuloveyouwei/article/details/30511303
在本屆WWDC全球開發人員大會接近尾聲時,蘋果公司專門針對開發人員公布全新的Swift程式設計語言以及新版的Xcode,蘋果公司稱其擁有“快速、現代、安全、互動”等特性,並且要全面優於Objective-C語言。“在過去的20年裡,我們只支援Objective-C。”軟體工程副總裁克雷格·費德裡奇在台上表示,而未來蘋果開發人員平台將支援這款全新的Swift程式設計語言。
感興趣的可以去官方下載swift的官方文檔,下面我們先來看下基礎資料型別 (Elementary Data Type),
1、常量與變數的定義
在swift中,我們用let來定義一個常量,用var來定義一個變數,例如:
[objc] view plaincopy
- let a=10;
- var b=12;
發現沒有,我們不需要為其指定類型,編譯器會根據變數的值來確定變數的類型;當然,如果沒有給變數設定初始值,就應該聲明變數的類型,如:
[objc] view plaincopy
- var b:String;
-
- b="adc";
當然,後面的分號可以不要,不過我還是給加上了,這樣代碼多了,結構會清晰些。。。Swift中可以使用幾乎任何字元來作為常量和變數名,包括Unicode,但是名稱中不能含有數學符號,箭頭,無效的Unicode,橫線-和定位字元,且不能以數字開頭,儘管數字可以包含在名稱裡。一旦完成了聲明,就不能再次聲明相同名稱的變數或常量,或者改變它的類型。例如:
[objc] view plaincopy
- let 王子="wangzi";
-
- var 大人="daren";
-
- var 22="2222"; //包含數字,錯誤
-
- var _a="a";
-
- var 王2="2";
2、輸出常量與變數
Swift使用 println()函數來輸出常量或變數,當然print函數也一樣,println帶換行,例如:
[objc] view plaincopy
- println(a);
-
- print(b);
println函數還可以格式化輸出一些日誌資訊,就像是Cocoa中NSLog函數的行為一樣,可以包括一些常量和變數本身。Swift在字串中插入變數名作為預留位置,通過\()來表示,例如:
[objc] view plaincopy
- var b:String;
- b="adc";
- println("我是\(b)");
輸出:我是adc
3、Int類型和UInt類型
我們知道在不同的平台下,int類型的長度不同,在OC中,我們可以用NSInteger來表示一個int類型,它可以根據所處平台來定義int的長度
[objc] view plaincopy
- #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
- typedef long NSInteger;
- typedef unsigned long NSUInteger;
- #else
- typedef int NSInteger;
- typedef unsigned int NSUInteger;
- #endif
在Switf中,我們可以用Int來定義一個int類型,一般來說,編程人員在寫代碼時不需要選擇整數的位元,Swift提供了一種額外的整數類型Int,是和當前機器環境的字長相同的整數位元在32位機器上就表示32位長度,在64位機器上就表示64位長度。Swift還提供了一種無符號類型UInt,同理也是和當前機器環境的字長相等。
[objc] view plaincopy
- var cc :Int=20;
Swift是一種型別安全的語言。型別安全就是說在編程的時候需要弄清楚變數的類型。如果您的代碼部分需要一個字串,你不能錯誤地傳遞一個整數類型。
因為Swift是型別安全的,它會在編譯的時候就檢查你的代碼,任何類型不符時都會報錯。這使得編程人員能夠儘快捕獲並儘可能早地在開發過程中修正錯誤。
類型檢查可以在使用不同類型的值時協助避免錯誤。但是,這並不意味著你必須指定每一個常量和變數所聲明的類型。如果不指定你需要的類型,Swift使用類型推導來指定出相應的類型。類型推導使編譯器在編譯的時候通過你提供的初始化值自動推匯出特定的運算式的類型。
類型推導使Swift比起C或Objective-C只需要更少的型別宣告語句。常量和變數仍然顯式類型,但大部分指定其類型的工作Swift已經為你完成了。
4、類型別名
我們在其他語言比如C/C++、OC中經常會用到typedef,用來為一種資料類型定義一個新名字,在Swift中用typealias來現有的類型定義可替代名稱,例如:
[objc] view plaincopy
- typealias MyInt = Int;
-
- var dd:MyInt;
5、元群組類型
元組,這個在OC中是沒有的,它可以將幾種資料類型組成一個元素,資料類型可以一樣,也可以不一樣,用()表示,例如(Int,String,Int)等表示;編程人員可以隨意地建立自己需要的元群組類型,比如 (Int, Int, Int), 或者(String, Bool)等。同時組成元組的類型數量也是不限的。例如:
[objc] view plaincopy
- let httpStatus=(404,"Not Found");
-
- var person : (Int,String) = (23,"rose");
-
- // var person2 : (Int,String) = (age :23, name :"rose"); //在明確指定元素類型的情況下不能加上元素名稱
-
- var person3=(age :23, name :"rose");
-
- //可以使用底線_忽略某個元素的值,取出其他元素的值
- var person4 = (20,"jack");
- var (_, name) = person4;
-
- println(httpStatus);
- println(person.0);
- println(person3.age);
- println(name);
6、可選類型和強制解包
什麼是可選類型,可選類型就是這種類型的值要麼存在,並且等於某某值,要麼就是不存在。比如在某個字串中尋找某個字元,要麼存在這個字元,要麼不存在這個字元
[objc] view plaincopy
- //可選類型的格式:類型名?
- var kIndex :Int?;
- // 問號?表明kIndex的值是可選的,可能是一個Int,也可能值不存在
- // kIndex的值要麼是Int類型,要麼是nil(nil代表值不存在)
- // kIndex預設就是nil,因此上面的語句相當於
- var kIndex :Int? =nil
[objc] view plaincopy
- // 不能直接將可選類型賦值給具體類型
- // 比如不能將Int?類型直接賦值給Int類型,因為Int?都不確定有沒有整數值
- var people:Int?=10;
-
- var people2:Int=people;
上面那樣表示錯誤,但反過來可以,你可以把int類型值賦給Int?類型,如果要讓上面表達正確,我們可以強制解包,用!表示,
[objc] view plaincopy
- var people:Int?=10;
-
- var people2:Int=people!;
這表示我確定變數people確實是存在10這樣一個值的,注意如果可選類型的值不存在,仍然進行強制解包,會報一個錯誤
[objc] view plaincopy
- var num :Int?
- var numValue =num!// 這行會報錯
我們可以用if條件陳述式來判斷一個可選類型的值是否存在,
[objc] view plaincopy
- let nums = "100".toInt();
-
- if(nums)
- {
- println("num的值是\(nums!)")
- }else
- {
- println("num的值不存在")
- }
預設情況下:如果想將可選類型的值賦給具體類型,比如將Int?的值賦給Int類型,需要使用驚嘆號!進行強制解包 ,我們可以聲明成隱式解包,
[objc] view plaincopy
- var num :Int! =20
- var numValue :Int =num // 自動解包,不用再使用! 進行強制解包
- // num是被聲明為隱式解包的可選類型Int!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Swift學習一