Swift語言概覽

來源:互聯網
上載者:User

標籤:

變數與常量

  Swift使用var聲明變數,let聲明常量。

var myVariable = 42myVariable = 50let myConstant = 42   //myConstant不能修改

類型推導

 

  Swift支援類型推導(Type Inference),所以上面的代碼不需指定類型,如果需要指定類型:

var str: String = "Swift"var str = "Swift" //自動推斷類型為String

 

  Swift的變數一旦聲明了,就不能修改類型了,上面的例子中str只能是字串類型,之後無論如何賦值都不能修改其類型。

  所以我們說類型往往可以省略,但有些地方還是不能省略。特別是在集合類型上面,例如一個本來想放NSObject的字典,因為初始化用的字串,就被推斷成一個完全都是字串的字典了。

  有一個奇葩的地方,Swift 可以用任意Unicode字元當做變數名,也就是說,中文,圖釋,都是可以的。

var 中文 = "swift"var ?? = "haha"

字串String

注意這裡產生的String,並不是NSString。他甚至都不是一個Object,我們可以在定義裡面看到:

 

struct String {    init()}

String和CFString一樣,他是一個Struct! 不過String可以和NSString互相替代,而且API通用。

數組和字典

Swift使用[]操作符聲明數組(Array)和字典(Dictionary):

var shoppingList = ["catfish", "water", "tulips", "blue paint"]shoppingList[1] = "bottle of water"var occupations = [    "Malcolm": "Captain",    "Kaylee": "Mechanic",]occupations["Jayne"] = "Public Relations"// 一般使用初始化器(initializer)文法建立空數組和空字典:let emptyArray = String[]()let emptyDictionary = Dictionary<String, Float>()// 如果類型資訊已知,則可以使用[]聲明空數組,使用[:]聲明空字典。

Array和String一樣,也是結構體。不過,Array不具有NSArray的API特性。需要顯示轉換成NSArray才可以調用其方法。

枚舉

  通過迴圈枚舉,即

 

30    while flag {enum(arr)} 31    for a in arr {} 32    for var i=1;i<13;++i {} 33    for i in 1..10 {} 

 

控制流程

Swift的條件陳述式包含if和switch,迴圈語句包含for-in、for、while和do-while,迴圈/判斷條件不需要括弧,但迴圈/判斷體(body)必需括弧:

let individualScores = [75, 43, 103, 87, 12]var teamScore = 0for score in individualScores {    if score > 50 {        teamScore += 3    } else {        teamScore += 1    }}
單路分支

在 if 語句中,條件必須是一個布林運算式
77    if blablabla { 78    } 79    else{ 80    } 注意:這裡的大括弧不可以省略。 多路分支81    switch num 82    { 83    case 1: 84      85    case 2: 86      87    default: 
  }

注意:不再需要寫break,且default必須有!且必須所有條件都要覆蓋到,一般情況下都會有default,但是若在enum中使用,就可以用case搞定了。

 對於case來說,不僅可以寫 case 1, case 2, 還可以寫 case 1, 2, 3, 4, 甚至 case, 1, 2, 3, 4, 7..10

可空類型

結合if和let,可以方便的處理可空變數(nullable variable)。對於空值,需要在型別宣告後添加?顯式標明該類型可空。

var optionalString: String? = "Hello"optionalString == nilvar optionalName: String? = "John Appleseed"var gretting = "Hello!"if let name = optionalName {    gretting = "Hello, \(name)"}

? 表示的是:Optional。寫法如下:

      var possibleValue: Int? = animalLegs["xiaohaha"] 

1       if possibleValue {

2         println("Notnil")

3       }

4       else {

5         println("111")

6       } 

!的作用就是突破Optional,拿到內部值62    if possibleValue { 63      let value = possibleValue! 64      println("xiaohaha has \(value) legs") 65    } 66    else { 67      println("> <") 68    }  不過這裡,有個簡練的寫法,更漂亮優雅。69    if let value = possibleValue 70    { 71      println("xiaohaha has \(value) legs") 72    } 73    else 74    { 75      println("> <") 76    } 
//如果變數的可選值是 nil,條件會判斷為 false,大括弧中的代碼會被跳過。如果不是 nil,會 將值賦給 let 後面的常量,這樣代碼塊中就可以使用這個值了。 

其他迴圈

  for-in除了遍曆數組也可以用來遍曆字典:

let interestingNumbers = [    "Prime": [2, 3, 5, 7, 11, 13],    "Fibonacci": [1, 1, 2, 3, 5, 8],    "Square": [1, 4, 9, 16, 25],]var largest = 0for (kind, numbers) in interestingNumbers {    for number in numbers {        if number > largest {            largest = number        }    }}largest

  while迴圈和do-while迴圈:

var n = 2while n < 100 {    n = n * 2}nvar m = 2do {    m = m * 2} while m < 100m

  Swift支援傳統的for迴圈,此外也可以通過結合..(產生一個區間)和for-in實現同樣的邏輯。

var firstForLoop = 0for i in 0..3 {    firstForLoop += i}firstForLoopvar secondForLoop = 0for var i = 0; i < 3; ++i {    secondForLoop += 1}secondForLoop

 

Swift語言概覽

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.