天天看點

Swift學習之路 -- 簡單值和控制流

本文學習自《 The Swift Programming Language-swift2.0官方手冊 中文版》的電子版

是記錄自己的Swift學習曆程、整理相關資料便于檢視

學習Swift有一個很友善的工具

playground

,可以同步輸出執行代碼後的結果,不用在每次列印輸出

配置:

Swift學習之路 -- 簡單值和控制流

選擇 New File

Swift學習之路 -- 簡單值和控制流

OK

簡單值

使用let聲明常量,使用var聲明變量

var myVar = 45
    myVar = 50
           

常量隻可以指派一次 也就是說你可以用常量表示某個隻需要指派一次,但需要使用很多次的值

let myLet = 
           

練習:建立一個顯示類型為Float且初始值為4的常量

let exp : Float = 
           

值永遠不會被隐式的轉換成其他類型,如果需要轉換類型,請顯式轉換

let label = "My age is "
var age   = 
let ageLabel = label + String(age)
           

把值轉換成字元串更簡單的方法:把值寫到括号中,且在括号前加反斜杠

let apples  = 
let oranges = 
let appleSummary = "I have \(apples) apples"
let fruits = "I have \(apples + oranges) fruits"
           

練習:使用()表示我的身高為175.5cm

let height : Float = 
let myHeight = "My height is \(height)cm"
           

建立一個空數組或者字典,使用初始化方法

let emptyArray = [String]()       //表明元素類型
 let emptyDict  = [String:Float]() //表明key和Value的類型
           

使用[]和[:]來建立空數組和空字典 并用下标或key來通路元素

var array = ["1","2","3"]
    print(array[])
    array[] = "change"
    print(array[])

var dict = ["name":"Unique","age":]
    dict["sex"] = "Man"
    print(dict)
           

控制流

使用if和switch來進行條件操作,使用for-in、for、while、和repeat-while來循環

包裹條件和循環變量括号可以省略,但語句體的大括号是必須的

let numberArray = [,,,,]
var teamScore   = 
    for score in numberArray {
            if score >  {
                teamScore += 
            } else {
                teamScore += 
            }
        }
    print(teamScore)
           

在if語句中,條件必須是一個BOOL表達式,不會隐形的與0做對比–這意味着像if score{…}這樣的代碼将會報錯

你可以同時使用if和let來處理值缺失的情況

var optionalString : String? = "Hello"
    print(optionalString == nil)

var optionalName :String? = "Unique"
var greeting = "Hello"
    if let name = optionalName {
            greeting = "Hello,\(name)"
    } else {
            greeting = "GOOD"
    }
           

練習: 把optionalName改成nil,greeting會是什麼?添加一個else語句,當optionalName是nil時給greeting賦一個不同的值

當變量的可選值是nil,條件會判斷false,大括号的代碼會被跳過。如果不是nil,會将值賦給let後面的常量,這樣在代碼塊中就可以使用這個值了

switch支援任意類型的資料以及各種比較操作

let vegetable = "red pepper"
switch vegetable {
    case "celery":
    let vegetableComment = "Add some raisins and make ants on a log."
    case "cucumber","watercress":
    let vegetableComment = "The would make a good tea sandwich."
     case let x where x.hasSuffix("pepper"):
     let vegetableComment = "Is it a spicy \(x)?"
default:
     let vegetableComment = "Evenything tastes good in soup."
        }
           

let x where x.hasSuffix(“pepper”) 是說vegetable的值是不是以”pepper”做字尾(也就是結尾) 是就指派給常量 x

switch執行到比對的子句之後,程式會退出switch語句,是以不必每個子句結尾都寫break

for in 周遊

let interestingNumbers = [
            "Prime" : [,,,,,],
            "Fibonacci" : [,,,,,],
            "Square" : [,,,,]
        ]

 var largest = 
     for (key,numbers) in interestingNumbers {
         for number in numbers {
                largest = number
            }
        }
     print(largest)
           

先周遊字典取出每個數組 再周遊數組

使用while來重複運作一段代碼直到條件不滿足,循環條件也可以寫在結尾,保證能至少循環一次

var n = 
 while n <  {
       n = n * 
 }
 print(n)

 var m = 
 repeat {
     m = m * 
 } while m < 
 print(m)
           

你可以在循環中使用..<來表示範圍,也可以使用傳統寫法,二者等價

var firstForLoop = 
for i in . {
    firstForLoop += 
}
print(firstForLoop)
           

使用..<建立的範圍不包含上界,想要包含的話使用…