第二課 流程控制、函數(shù)、匯編分析

if-else

let age:Int = 4

if age >= 22{

    print ("Get married")
}else if age >= 18{
    print ("being a adult")
} else if age >= 7{
    print ("go to school")
} else {
    print("Just a child")
}
  • if 后面的條件可以活力小括號
  • 條件后面的大括號不可以省略
  • if 后面的條件只能是 Bool 類型,而不可以是整數(shù)等類型

while

Swift里加了一個 repeat while,相當(dāng)于C語言中的do while

var num = -1
repeat {
   print ("num is \(num)")
} while num > 0
  • 從 Swfit 3開始,去除了自增、自減運算符

for

  • 閉區(qū)間運算符:a...b,a <= 取值 <= b
let range = 0...3
let arr = ["lilei","xiaohong", "ceshi", "cdkdk"]


for i in range{
    print arr[i]
}

for i in 0...3 {
    print arr[0]
}

for name in arr[0...3] {
    print (name)
}

在以上的代碼中,i 默認(rèn)是常量,如果要修改 i 的值,把它聲明為變量即可

for var i in 0...3 {
    i += 5
    print (i)
}
  • 半開區(qū)間運算符:a..< b,a <= 取值 < b
  • 單側(cè)區(qū)間:讓區(qū)間朝一個方向盡可能地遠(yuǎn)
for name in names[...3] {
    print name
}

for name in names[0...] {
    print name
}

switch

var number = 1

switch number{

    case 1:
      print("number is i")
      break
    default:
      print("other")
}
  • case、default 后面不能寫大括號
  • 默認(rèn)可以不寫 break,并不會貫穿到后面的條件
  • 如果希望繼續(xù)執(zhí)行下面的結(jié)果,break 改成 fallthrough 即可
  • switch 必須要保證能處理所有的情況
  • case、default 后面至少要有一條語句
  • 如果不想做任何事,加個 break 即可
  • 另外switch語句還支持復(fù)合條件,也支持 CharacterString 類型

如下所示,這兩種寫法的結(jié)果是一樣的


let string = "Jack"

switch string{

    case "Jack":
       fallthrough
    case "Rose":
       print ("person")
    default:
       break
}

switch string{

    case "Jack", "Rose":
       print ("person")
    default:
       break
}

區(qū)間匹配、元組匹配

let count = 62

switch count{
    case 0:
      print ("none")
    case 1..<5:
      print ("a few")
    case 5..<12:
      print ("several")
    default:
      print ("many")
}

并且支持用下劃線_ 來忽略某個值

以下這段代碼為判斷某個點在什么地方

let point = (1, 1)

switch point{

    case (0,0):
      print ("the origin")
    case (_, 0):
      print ("x-axis")
    case (0, _):
      print ("y-axis")
    default:
      print("outside")
}

值綁定

let point2 = (2, 0)

switch point2{

    case (let x, 0):
       print ("on the x-axis with an value of \(x)")
    case (0, let y):
       print ("on the y-axis with a value of \(y)")
    case (let x,let y):
       print ("some where else at \(x) , \(y)")
}

switch 語句中 where 的用法

let point3 = (1, -1)

switch point3{

    case let (x,y) where x == y:
       print ("on the line x == y")
    case let (x,y) where x == -y:
       print ("on the line x == -y")
    case let (x,y):
       print ("\(x) , \(y) is just ")
}

將所有正數(shù)加起來

var numbers:Array = [10,30, -12, -56, 23]

var sum = 0
for num in numbers where num >= 0{

    sum += num
}

print (sum)

標(biāo)簽語句

outer : for i in 1...4{

    for k in 1...4{

        if k == 3{
            
            continue outer
        }

        if i == 3{
            break outer
        }

        print ("i == \(i), k == \(k)")
    }
}

函數(shù)的定義

func pi() -> Double {

    return 3.14
}

func sum (v1: Int, v2 : Int) -> Int {

    return v1 + v2
}

var v3:Int = sum(v1:10, v2 : 34)

print (v3)

注意:形參默認(rèn)為 let,也只能是 let

以下三種無返回值的寫法是一樣的

func func1() -> Void{

}

func func2 -> (){
}

func func3(){
}

返回元組:實現(xiàn)多返回值

func calculate (v1: Int , v2: Int) -> (sum:Int, difference: Int, average:Int){

    let sum = v1 + v2
    return (sum, v1 - v2, sum >> 1)
}

let result = calculate(v1:20, v2:80)

result.sum
result.difference
result.average

函數(shù)的文檔注釋

/// 求和【概述】
///
/// 將2個整數(shù)相加【更詳細(xì)的描述】
///
/// - Parameter v1 :第1個整數(shù)
/// - Parameter v2 :第2個整數(shù)
/// - Returns : 2個整數(shù)的和
///
/// - Note:傳入2個整數(shù)即可【批注】
///

func sum3(v1:Int, v2:Int) -> Int{
    return v1 + v2
}

呈現(xiàn)的效果如下圖所示

image.png

詳細(xì)的注釋規(guī)范請參考:https://swift.org/documentation/api-design-guidelines/

默認(rèn)參數(shù)值
func check(name:String = "nobody", age:Int, job:String = "none"){

    print ("name = \(name), age = \(age), job = \(job)")
}

check (name:"Jack", age:14, job:"Doctor")
check (name:"Jack", age:20)
check ( age:14, job:"Doctor")
可變參數(shù)值
func  sum4(_ numbers: Int...) -> Int {

    var total = 0

    for num in numbers{
        total += num
    }

    return total
}

var total = sum4(10,290,34,20)
print(total)
  • 一個函數(shù)最多只能有1個可變參數(shù)
  • 緊跟在可變參數(shù)后面的參數(shù)不能省略參數(shù)標(biāo)簽
輸入輸出參數(shù) (in-out Parameter)
  • 可以用 inout 定義一個輸入輸出參數(shù),可以在函數(shù)內(nèi)部修改外部實參的值
var numb = 10

func add(number: inout Int){
    number = 20
}

add(&numb)
print(numb)
  • 可變參數(shù)不能標(biāo)記為 inout
  • inout 參數(shù)不能有默認(rèn)值
  • inout 參數(shù)的本質(zhì)是地址傳遞(引用傳遞)
  • inout 參數(shù)只能傳入可以被多次賦值的
函數(shù)重載(Function Overload)
  • 規(guī)則
    • 函數(shù)名相同
    • 參數(shù)個數(shù)不同 || 參數(shù)類型不同 || 參數(shù)標(biāo)簽不同

如下圖所示:

func sum (v1: Int , v2: Int) -> Int {
       return v1 + v2
}

func sum (v1: Int , v2: Int, v3: Int) -> Int {
       return v1 + v2 + v3
}
內(nèi)聯(lián)函數(shù)
  • 如果開啟了編譯器優(yōu)化(Release模式默認(rèn)會開啟優(yōu)化),編譯器會自動將某些函數(shù)變成內(nèi)聯(lián)函數(shù)
    • 將函數(shù)調(diào)用展開成函數(shù)體
image.png
  • 哪些函數(shù)不會被內(nèi)聯(lián)
    • 函數(shù)體比較長
    • 包含遞歸調(diào)用
    • 包含動態(tài)派發(fā)
函數(shù)類型
  • 每一個函數(shù)都是有類型的,函數(shù)類型由形式參數(shù)類型、返回值類型組成
func test() {}

func  sum (a:Int, b: Int)  ->  Int {
    a + b
}
函數(shù)類型作為函數(shù)返回值
  • 返回值是函數(shù)類型的函數(shù),叫做 高階函數(shù)
嵌套函數(shù)
  • 將函數(shù)定義在函數(shù)內(nèi)部
func  forward (_ forward : Bool)  -> (Int)  ->  Int {

      func   next (_ input : Int)  ->  Int  {
           input + 1
      }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容