Swift3.0-控制流

swift 使用if 和switch作為條件語句,使用for-in,for,while,以及repeat-while作為循環語句。在條件語句和循環語句中括號()是可選的,可以加上也可以不加,大括號在語句中是必須要加上的。

let individualScores = [75,43,103,87,12]
var teamScore = 0
for score in individualScores {
  if score > 50{
      teamScore +=3
  }else {
      teamScore +=1
  }
}
print(teamScore)

在if語句中,條件中的結果必須是個布爾表達式—這就意味著像if score {...} 是錯誤的,這樣寫并不是一個與0比較大小的語句。

可以使用if和let 結合在條件語句中判斷一個變量或常量有沒有值。這個常量或變量一定是可選類型的。因為一個可選類型有可能有值也有能是nil。子可選類型名稱后面加上?標志,表明這個變量或常量是可選類型。可選類型請參照http://www.lxweimin.com/p/6b168366a2c1

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

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

如果optionalName是nil,這個判斷就是false,就會跳過去。相反,如果不為空就會把值賦給name,執行大括號的內容。

另一種方法判斷可選類型是否為空是使用空合運算符??,如果可行類型為空表達式的值就會是默認值。

let nickName:String? = nil
let fullName:String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"

nickName??fullName 等于

 (nickName != nil) ? nickName! : fullName

Switch 語句支持不同類型的數據和許多比較操作-不僅僅是整數或測試相等。

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

與Objective-C 和C語言不同的是,switch 語句中的default不可以去掉,如果要去掉的話,把default換成一個包含恒成立的case語句。比如上面的例子中可以把default換成

case let x:
            print("Everything tastes good in soup.")

也是可以的,因為let x 聲明了一個可以匹配余下所有值的常量。這使得switch語句已經完備了,因為不需要再寫default。

注意,case分支的模式允許將匹配的值綁定到一個臨時的常量或變量。這種行為被稱為值綁定。可以使用where語句來判斷額外的條件。

在switch語句中執行完匹配的代碼后,程序就會跳出switch語句。并不會繼續執行接下啦的case分支,因此不需要在case分支的代碼中加上break。如果你想執行完一個分支后接著執行下一個分支,可以在case分支的代碼中加上fallthrough(貫穿)。

我們可以在for-in中提供一對名稱表示Key和Value來循環一個字典。字典是組無序集合,因此它的key和value是在一種隨意順序中循環的。

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

while的條件語句可以在末尾,repeat-while至少循環了一次。

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

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

在一個循環中可以用范圍運算符表示范圍

var total = 0
for i in 0..<4 {
     total += i
}
print(total)

..<不包括上限,使用...兩邊都包括

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容