天天看點

《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)

Swift是Apple于2014年WWDC(蘋果開發者大會)釋出的全新開發語言,可與Objective-C共同運作于mac OS和iOS平台,用于搭建基于Apple平台的應用程式。

本章主要為您介紹了Swift 3.0的常量、變量、資料類型、運算符、循環語句、條件語句等一些基礎的文法知識。

3.1Swift的基本概念

Swift是一種強勁而直覺的程式設計語言,它由Apple創造,可用來為iOS、Mac、Apple TV 和 Apple Watch等裝置和平台開發應用程式。Swift語言旨在為開發者提供充分的自由,是以它易用并且開源,隻要有想法,誰都可以使用Swift創造非凡的作品。

Swift 将現代程式設計語言思想的精華,和蘋果工程師文化的智慧結合了起來。編譯器對性能進行了優化,程式設計語言對開發進行了優化,兩者互不幹擾,魚與熊掌兼得。是以Swift具有快速而且高效的特點,它還是第一套和腳本語言具有同樣表現力和趣味性的系統程式設計語言。

Swift的設計以安全為出發點,以避免各種常見的程式設計錯誤類别。Swift能夠提供實時回報,而且可以被無縫內建到現有的 Objective-C 代碼中,是以開發者能夠編寫安全而可靠的代碼,并在節省時間的同時,創造出非常豐富的 app 體驗。

在蘋果官網提供了一些使用Swift語言開發的知名App,如圖3-1-1所示:

《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)

圖 3-1-1(來自apple.com)

    Swift語言非常契合2014年WWDC的slogan:Write the code,change the world。(寫代碼,改變世界)。Swift作為新的程式設計語言,它集中了很多其它進階語言的影子,內建了它們的很多優點。它和Javascript、Go、Ruby、Python等語言都有些神似,并且它的文法更加接近自然語言,使得程式設計的過程變得更加簡單和有趣。這些變化進一步降低了蘋果平台上App開發的門檻,延續蘋果一貫主張的用App來解決一切問題,而這也是蘋果生态鍊中重要的一個環節。

随Swift推出的新版內建開發環境Xcode已經完全支援使用Swift。Xcode所附帶的線上文檔中也在原有的Objective-C内容的旁邊放上了Swift的說明,可見蘋果是多麼重視Swift語言的發展。這也正好印證了前面提到的,蘋果在降低自己生态鍊中最總要一環的門檻,這會使得蘋果自身的競争力進一步加強。

雖然目前看來,Swift語言可能還不夠完美,比如可以使用的第三方庫還也較少。但是它的出現,代表着接近自然語言文法的程式設計方法正在快速的發展,進而使每個希望編寫應用程式的人都可以很容易上手編碼工作,并快速開發出品質高的應用程式。

3.1.1  Swift語言的特點

  • 代碼的編寫更加簡潔;
  • 結合Playground,可以做到真正意義上的所見即所得;
  • 便于擴充,通過橋接可以使用Object-C代碼;
  • 直接支援閉包;
  • 支援面向過程程式設計和面向對象程式設計;
  • Swift全面優于Object-C語言,性能是Object-C的1.3倍,并且上手更加容易;
  • 使用自動引用計數(AutomaticReference Counting, ARC)來簡化記憶體管理;
  •  Swift是一門類型安全語言,類型安全語言需要代碼裡值的類型非常明确。如果您的代碼中有部分值需要 Int類型,你就不能錯誤地傳遞String;
  • Object-C需要頭檔案.h和實作檔案.m,而Swift隻需要一個.swift檔案;
  • Swift不再需要分号;作為代碼的分隔符了;

3.1.2 Swift常量和變量的定義

常量所指向的是一個特定類型的值,如數字8或者字元“Swift”。變量的值可以根據需要不斷進行修改,而常量的值一經定義,是不能夠被修改的。

常量和變量在使用前都需要定義 (聲明),在Swift中定義常量和變量變得非常簡單。您可以使用let關鍵詞定義一個常量,使用var關鍵詞定義一個變量。

1       let pi =3.14159265                    //常量
2        var enemyKilled = 100               //變量
           

在上面的代碼中,首先定義了一個常量pi,表示圓周率,因為圓周率是固定不變的,是以将其定義為常量。接着又定義了一個變量enemyKilled,表示在遊戲場景中消滅的敵人數量。因為玩家水準不同,消滅的敵人數量也不相同,是以這裡定義為一個變量。您可以根據需要,修改變量的值。與變量不同的是,常量的值一旦确定就不能修改。如果想嘗試改變一個常量的值,編譯代碼時就會報錯。

您可以在同一行代碼中,定義多個常量或變量,名稱之間使用半形逗號分隔:

1        var length = 10, width =20, height = 30
           

您不需要為常量指定資料類型,但是必須給常量指定一個值。編譯器會根據常量的值,自動判斷常量的類型。在上面的代碼中,編譯器會認為pi常量的資料類型為浮點類型,因為它的值是一個浮點數。一旦定義了一個常量或變量,您将不可以再改變它們的資料類型。

為了能夠直覺地顯示常量或變量的資料類型,您也可以在定義常量或變量時通過冒号設定它們的資料類型:

1      var age : Int = 24      //為變量age設定整型的資料類型
           

這裡定義了一個名為age的變量,它的類型為整型,值為24。Swift 提供了與Object-C的相似的基礎資料類型,包含整數Int,浮點數Double、Float,布爾值 Bool 以及String 字元串。同時Swift也提供了兩種強大的集合資料類型:數組Array和字典Dictionary。

Swift可以使用幾乎任何字元來作為常量和變量名,包括Unicode字元。Unicode 是為了解決傳統的字元編碼方案的局限而産生的,它為每種語言中的每個字元設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。它也包含了各種文字編碼,如中文、日文、韓文、英文等字元;甚至是聊天工具中使用的表情符号等。雖然常量或變量的名稱都可以包含數字,但是名稱的開頭不能是數字:

1       let _count = 6            //正确的命名方式
2       let count = 8              //正确的命名方式
3       let Count = 8             //正确的命名方式,Swift命名是區分大小寫的
4       let 貓 = “Cat”  //正确的命名方式,中文字元可以作為常量或變量的名稱
5       let  = “Cat”   //正确的命名方式
6       let default = 0            //錯誤的命名方式:default作為關鍵字不能被用作常量或變量的名稱
7       let 8Count = 8           //錯誤的命名方式:數字不能放在名稱的開頭
8        let count# = 8;                   //錯誤的命名方式:名稱中不能包含特殊字元
 
           

在定義常量時,通常使用大寫的常量名稱,這樣代碼将更加具有識别性:

1       let PI= 3.14159265    
           

在定義變量時,為了統一項目的編碼風格,您可以采用駝峰命名法,或者使用下劃線風格:

1       varenemyKilledNumber = 100          //駝峰風格命名法
2       varenemy_killed_number = 100                //下劃線風格命名法                            
           

3.1.3常量和變量的輸出

Swift使用print全局函數來輸出變量或者常量。除了使用print函數,您還可以使用debugPrint、dump函數來輸出常量和變量的值。Swift原來提供的println函數,已經被更名為print函數,所有print函數擁有了和println函數相同的功能,即輸出變量或常量的值之後,再輸出一個換行:

1       var str ="Hello, Swift"
2        
3       print(str)                              //輸出内容為:Hello, Swift
4       debugPrint(str)                   //輸出内容為:" Hello, Swift"
5       dump(str)                            //輸出内容為:- Hello, Swift
           

在第3行至第5行之間的所有代碼,都可以輸出

Hello,Swift

内容。

在print語句中使用小括号,可以同時輸出多個常量或變量的值,在小括号的左側需要添加反向斜線\。

1       let name = "王豐"
2       let age ="24"
3        print("我的名字是\(name),今年\(age)歲了。")                           
           

第3行語句的輸出結果為:

我的名字是王豐,今年24歲了。
           

您也可以使用+号,進行輸出語句的拼接,将第三行的代碼替換為:

1       print("我的名字是"+name+",今年"+age+"歲了。")
           

輸出的結果同樣是:

我的名字是王豐,今年24歲了。
           
《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)
《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)
《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)
《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)
《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)
《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)
《iOS移動開發從入門到精通》圖書連載8:Swift的基本概念(上)