天天看點

Swift

在swift 2.0之後增加defer、guard、repeat、catch、rethrows、hrow、throws和try關鍵字,其中repeat關鍵字替代do - while循環中的do,即中repeat - while循環。而do關鍵字用于錯誤處理。catch、rethrows、throw、throws和try是錯誤處理關鍵字。

錯誤處理是swift 2.0之後增加新内容。

defer

guard

repeat

catch

rethrows

hrow

throws

try

======================================================

什麼是辨別符呢?

辨別符就是給變量、常量、方法、函數、枚舉、結構體、類、協定等由開發人員指定的名字。

其實,構成辨別符的字母是有一定規範的,swift中命名規則是:

區分大小寫,myname與myname是兩個不同的辨別符;

辨別符首字元可以以下劃線(_)或者字母開始,但不能是數字;

辨別符中其他字元可以是下劃線(_)、字母或數字。

例如: username、user_name、_sys_val、身高等為合法的辨別符,而2mail、room#和class為非法的辨別符。

 ==================================================

什麼是關鍵字呢?

關鍵字是類似于辨別符的保留字元序列,由語言本身定義好的,不能挪作他用,除非用重音符号(`)将其括起來。

swift語言常見的關鍵字有以下4種。

與聲明有關的關鍵字:class、deinit、enum等。

與語句有關的關鍵字:break、case、continue等。

表達式和類型關鍵字:as、catch、dynamictype、false等。

在特定上下文中使用的關鍵字:associativity、convenience、dynamic等。

swift中關鍵字是區分大小寫的,是以class和class是不同的,那麼class不是swift的關鍵字。

===============================================

使用var還是let?

在我們開發過程中啊什麼時候定義關鍵字為var,還是定義為let呢?

其實啊都能滿足我們的需求,那我們到底應該如何選擇?

例如:可以将圓周率π定義為let或var。

let π = 3.14159

var π = 3.14159

上面代碼編譯不會報錯。但是從業務邏輯層面講,π應該定義為常量(let)的,因為一方面常量(let)不能修改,另外在程式中使用常量(let)可以提高程式的可讀性。

有人說:原則上優先使用let,它有很多好處,可以防止程式運作過程中不必要的修改、提高程式的可讀性。特别是引用資料類型聲明時候經常采用let聲明,雖然在業務層面上并不是一個常量,而是防止程式運作過程中錯誤地修改它引用。

常量是辨別符的前面加上關鍵字let。常量其值在使用過程中不會發生變化的量,下面是聲明常量:

let _hello = "hello"

注意哦常量隻能在初始化的時候被指派,如果再次給_hello指派,

比如: _hello = "hello, world"

程式會報錯的

變量來了

 變量是在辨別符的前面加上關鍵字var,聲明變量啦:

var scoreforstudent = 0.0

聲明double類型scoreforstudent變量,并且初始化為0.0。

如果在一個語句中聲明和初始化了多個變量,那麼所有的變量預設具有相同的資料類型(待驗證):

var x = 10, y = 20

在多個變量的聲明中,也能指定不同的資料類型哦:

var x = 10, y = true

其中x為整型,y為布爾型。

==================================================

在swift中,表達式有3種形式。

l  不指定資料類型

var a1 = 10

l  指定資料類型

var a1:int  = 10

l  使用分号

var a1:int = 10; vara2:int = 20

在swift語言中,一條語句結束後可以不加分号也可以添加分号,但是有一種情況必須要用分号,那就是多條語句寫在一行的時候,需要通過分号來差別語句。

例如:

var a1:int = 10; vara2:int = 20;

  二進制運算符:

         +         加      求和,還可用string類型,進行字元串連接配接操作

         -   減      求差

         *   乘      求積

         /   除      求商

         % 取餘   求餘數

 一進制運算符:

        -    取反符号      取反運算

       ++     自加一  先取值再加一,或先加一再取值

        --       自減一  先取值再減一,或先減一再取值

除了一些常用的運算符,還有一些其他的:

•      引用号(.):執行個體調用屬性、方法等操作符。

•      問号(?):用來聲明可選類型。

•      感歎号(!):對可選類型值進行強制拆封。

•      箭頭(->):說明函數或方法傳回值類型。

•      冒号運算符(:):用于字典集合分割“鍵值”對。

在swift中資料類型有那些呢?整型、浮點型、布爾型、字元、字元串這些類型是一定有的,其中集合、枚舉、結構體、類也是swift中的資料類型。元組是swift中特有的。

其他那些類型我們可能多少知道些或是聽說過。元組是在swift中有的,它是什麼呢?

它是一種資料結構,在數學中應用廣泛。在計算機科學中,元組是關系資料庫中的基本概念,元組表中的一條記錄,每列就是一個字段。是以在二維表裡,元組也稱為記錄。

現在使用swift文法表示student元組就是:

第一種寫法

 ("1001", "張三", 30, 90)                     

第二種寫法

 (id:"1001", name:"張三", english_score:30, chinese_score:90)

  在c、objective-c和java等其他語言中,整型之間有兩種轉換方法:

    從小範圍數到大範圍數轉換是自動的;

    從大範圍數到小範圍數需要強制類型轉換,有可能造成資料精度的丢失。

    而在swift中這兩種方法是行不通的,需要通過一些函數進行顯式地轉換,代碼如下:

    let historyscore:uint8 = 90

    let englishscore:uint16 = 130

    let totalscore = historyscore + englishscore  //錯誤

    程式就會有編譯錯誤,原因是historyscore是uint8類型,而englishscore是uint16類型,它們之間不能轉換。

兩種轉換方法:

    一種是把uint8的historyscore轉換為uint16類型。由于是從小範圍數轉換為大範圍數,這種轉換是安全的。

代碼:

let totalscore = uint16(historyscore) + englishscore   //是正确的轉換方法。

    另外一種是把uint16的englishscore轉換為uint8類型。由于是從大範圍數轉換為小範圍數,這種轉換是不安全的,如果轉換的數比較大可能會造成精度的丢失。

let totalscore = historyscore + uint8(englishscore)  //是正确的轉換方法。

本例中englishscore的值是130,這個轉換是成功的,如果把這個數修改為1300,雖然程式編譯沒有問題,但是會在控制台中輸出異常資訊。

整型與浮點型之間的轉換

    整型與浮點型之間的轉換與整型之間的轉換類似:

        let historyscore:float = 90.6   

        let englishscore:uint16 = 130 

        let totalscore = historyscore + englishscore  //錯誤  

        let totalscore = historyscore + float(englishscore)  //正确,安全

        let totalscore = uint16(historyscore) + englishscore  //正确,小數被截掉