第一章 Swift介紹

1.1 Swift基本語法

接觸 一個新語言就先從println("Hello World")開始

1.1.1 常量和變量

在Swift中用var關鍵字聲明一個變量,而聲明常量則用let關鍵字。這樣的聲明規則適用于Swift中所有的數據類型,這點與Objective-C有差別。在Swift中,一個對象的可變版本與b不可變版本具有相同的類型——并不是子類(subclass)的關系。

注意:Swift中的所有的數據類型是有三種不同的數據結構中某一種實現的。1. 枚舉(enum) 2.結構體(struct) 3. 類(class)。在代碼中這些數據類型的傳遞方式也不同。
** 枚舉和 結構體在代碼中以值的方式進行傳遞**。即創建原始對象的副本并對其賦值,對原始或者副本對象的修改、刪除操作不會影響到另外一個。
類是通過引用的方式進行傳遞的。即將指向原始變量的指針賦值給新的變量,無論修改哪個變量,另一個變量也會受到影響。
Swift一門強類型語言,每一個變量的類型在編譯時期就已經確定了,并且在其整個生命周期里只能存儲固定類型的值

聲明變量var itemCount: int,即是聲明了一個名為itemCount的Int類型變量。使用變量前,必須給變量設置一個初始值。其實在聲明時,就可以設置初始值,如var itemCount: int = 2
Swift還有個功能為類型推斷。如果編譯器能夠從初始值中獲取得足夠多的信息,進而推斷出初始值的類型。例如我們可以這樣聲明一個Int類型變量var itemCount = 2。同理如果初始值設置為函數的返回值,編譯器會把變量的類型推斷為與函數返回值一直的類型。

1.1.2 字符串插值

利用字符串的插值操作,將變量、常量和其他表達式的值添加到輸出中。字符串插值為:在括號中包含一個變量或表達式,再用一個反斜杠進行轉義,最后將其直接添加到字符串中。例如:

var count = 99
println("there are \ (count)  apples in your box")
//輸出:there are 99 apples in your box

字符串插值操作不僅僅適用于打印輸出,在使用字符串的任何地方都可以使用。
例如:

var firstName = "peng"
var lastName = "xiaoZhi"
var userName = " \ (firstName ) \ (lastName) \ (arc4random()%500)"
//userName: pengxiaoZhi255
1.1.3 流程控制

條件語句
Swift提供了if和switch兩種語法結構來有條件地執行代碼塊。

if語句與Objective-C相近,不過也有不同之處:

  1. if語句并非必須將檢測表達式放入括號中。
  2. 條件語句的代碼塊必須在大括號中。
  3. 檢測表達式的結果必須明確地為true或者flase,一個值為0的int變量并不會隱式的等價于false,其他的值也不會。

switch語句基于Objective-C,在Swift中它更加強大。不過我們也需要考慮兩個重要的區別。

第一:在Swift中必須覆蓋每一種可能出現的情況。default分支可以滿足這一要求。
第二:在Swift中當遇到下一個case分支開始時,switch語句會自動結束。

循環語句
與Objective-C類似,唯一不同的就是在語法表達上。
例:

//for循環
for var i = 0; i < 10;  ++i{
  println("i = \ (i)")
}
//for in
for i in 0 ..< 10{
  println("i = \ (i)")
}//"..<"是半開區間運算符,它包含區間最左邊的值,但是不包含最右邊的值。“...”是閉區間運算符,它包括區間兩端的值。

迭代集合(例如數組)

var itemIds: [int] = generateItemIds()
for itenId in itemIds{
  println("itemId :\ (itemId)")
}

while和do-while和Objective-C一樣,只是去掉了檢測表達式的括號。break和continue的效果完全一樣,break跳出當前循環,取消之后迭代。continue終止當前迭代,立即開始下一次迭代。
swift有一個Objective-C沒有的強大功能:給循環語句增加一個標簽(label),然后在內部循環中指定希望break或continue到哪個循環中。一個標簽由名稱之后跟著一個冒號構成,并且標簽位于循環語句關鍵字之前:

var folders: [SomeFolderClass] = foldersToProcess()
outer: for folder in folders{
 inner: for file in folder{
   if shouldCancle (){
     break outer
   }
   file.process()
 }
}

1.2 基本數據類型

1.2.1 整型

整型為Int。Int在32位設備中為32位整型,在64位設備中為64位整型。當需要特定長度時,可使用Int8、Int16、Int32或Int64。前面加一個U就是對應的無符號版本。
注:swift為強類型語言,代碼中不能隨意混合搭配使用Int的各種類型,并且不能在混合類型之間做數學運算和比較操作。
警告:當在設備間傳輸文件時,為了確保兼容性,寫入到文件中所有的整型變量都應該明確指定長度

1.2.2 Double和Float

swift代碼中,當需要使用小數時,可以使用Float和Double類型。Float是32位值,Double是64位值,這與設備的架構無關。當使用小數時,編譯器總是將其推斷為Double類型,而不是Float。因此,如果不需要64位的高精度,需要顯示地將變量聲明為Float。

1.2.3 布爾型

布爾型用于存儲布爾值,這與Objective-C非常相似,只不過swift使用的是true和false,而Object-C使用YES和NO。
注:在Objective-C中,許多類型都可以轉換為布爾類型。如果某種類型值存在內容,會轉換為YES,如果是空的,則轉換為NO。Swift則不同。在Swift中只有顯示地返回一個布爾類型才能被用于布爾值的聲明。在代碼中不能將布爾值與0或nil隱式地進行比較。

1.2.4 字符串

Swift中的字符串跟Objective-C中的有很大差別。var str = "Hello World"只需簡單的置于雙引號內即可。
String是Character類型值的集合。通過計算字符在內存中所占字節數判斷一個字符串的長度,在OC中是可以的。Swift中必須通過count()函數來判斷一個字符串中有多少個字符。Swift中的String也兼容OC中的NSString,由于兩者的實現方式有所不同,因此從NSString的length屬性得到的元素總數可能跟Swift中不盡相同。通過String的屬性utf16Count獲得的值與NSString的length屬性才會相同。
Swift中兩個字符串拼接直接用+號。
注:不能直接將Character與String進行拼接。必須創建一個新的包含Character值的String在于其他String拼接。String(character) + str1
兩個字符串比較直接用==號返回true或false。

1.2.5 數組

在Swift中,聲明數組時必須指定數組包含的類型。一旦確定類型,數組中就只能包含確定的這一類型。

var dogs = ["ahuang","piqiu","heizi","wangcai","alv"]//每項的類型必須是相同的類型,否則會出現編譯錯誤

聲明時有兩種方法可以表示聲明的類型是一個數組:長形式和短形式。效果是一樣的,可以互換使用:

  • 長形式:Array<ValueType>
  • 短形式:[ValueType]

注:在Swift中創建一個不可變的數組時,無法對數組做添加、修改和刪除操作。不過可以修改數組中元素的屬性。
對數組進行訪問和修改的放法:

var array :[Int] = [1,2,3]
println(arrar.count) //輸出3,數組的個數
array.append(4)  //[1,2,3,4] 末尾增加元素
arrar.insert(5,atIndex:0) //[5,1,2,3,4] 指定的位置增加元素
array.removeAtIndex(1) //[5,2,3,4] 刪除指定的元素
array.removeLast() //[5,2,3]刪除最后一個元素
array.removeAll()  //[] 刪除所有元素
println(arrar.isEmpty) //ture 判斷數組是否為空
1.2.6 字典

字典的聲明方式跟數組一樣,也分為長形式和短形式,可以互換使用:

  • 長形式:Dictionary<KeyType: ValueType>
  • 短形式:[KeyType: ValueType]
    聲明字典是,只要提供足夠多的信息,就可以使用類型推斷:var Dic = ["Jack":32, "Rose":28] 推斷這是一個[String:Int]類型。
    使用count屬性可以判斷出字典的元素總個數。利用字典中的兩個數組屬性keys和values可以單獨對字典進行迭代。

數組跟字典都是集合的一種,可以使用for-in對兩個進行迭代。

以上就是第一章的內容,可能會有些繁瑣,主要是區別OC來講的。有些基本知識還是需要知道的,希望能成為學習Swift的入口。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容