swift -2 元組,函數

一、元組

1、元組和數組非常相似,區別在於什麼?

·元祖的長度是任意的

·元祖中的數據可以是不同類型的  (當然,這只是大多數人多說法,但是個人並不認同,數組的長度也是可以任意的,數據也可以是不同類型的)


2、1⃣️元組的定義

var userInfo1 = ("zhanshan","lisi",20)
print(userInfo1.0) //讀取元祖中的數據

let (name, isMale, age) = userInfo1  // 在這裏,name = "zhanshan"
print(name)

2⃣️元祖定義的第二個方法

var userInfo2 = (name:"list",isMale:"woman",age:22)
print(userInfo2.name)

//在元祖中,我們可以跳過我們不關心的值,用下劃線跳過,這樣,我們就訪問不到 userInfo1.1 這個數據了
let (name , _ , age) = userInfo1

3、元組中的可變元祖和不可變元組(let var)

let yuanzu1 = (name:"aiya",isMale:"woman",age:47)// 不可變元祖是不可以改變它固定的值的
print("\n\(yuanzu1)")

var yuanzu2 = (name:"list",isMale:"woman",age:22)// 可變元組可以改變裏面的值
yuanzu2.name = "wocao"
print(yuanzu2.name)

4、可選值 Optional,在類型後面加上個?

代表它使可選的。可選的意思是可以爲空,也可以不爲空

var myVar : AnyObject?
myVar = "xiaomei"
print(myVar)


但是這樣輸出的結果是這樣的    
Optional(xiaomei)

但是我們在輸出的時候又不需要Optional 顯示,所以就得給可選值拆包

1⃣️、可選值的拆包 , 不要在輸出的時候顯示Optional,我們只需要在輸出值的後面加上個感嘆號

//可選值的拆包 , 是因爲可選值,內部封裝枚舉類型的。Optional+some

比如,我們可以這麼輸出

<span style="font-size:18px;">print(myVar!)</span>
這樣輸出的話就沒有Optional顯示了

2⃣️、if let 的組合可以去除Optional

<span style="font-size:18px;">if let name = myVar
{
    print("\n\(name)")// 在這裏\n是換行顯示出來的意思,和其他編程語言一樣
    
}</span>

小練習
輸出一條問候語,打印出某某,你好

<span style="font-size:14px;">var name : AnyObject?
name = "德瑪"
print("\n\(name!),你好")

if let moumou: AnyObject = name
{
    print("\n\(moumou),你真好")
}</span>
上面用到了可選值的方式,並且用兩種方式消除了Optional的顯示



二、函數

swift 中的函數的關鍵字 叫做 func

//func 函數名 (參數) -> 返回值類型{

//    實現部分

//}


<span style="color:#33cc00;">//函數的聲明和實現部分</span><span style="color:#333333;">
func 問候語(name:String,day:String)->String{
    return "hello,\(name),today is \(day)"
}
</span><span style="color:#33cc00;">//函數的調用</span><span style="color:#333333;">
print(問候語("lisa", day: "星期三"))</span>


函數小練習1

傳入一個int型的數組,返回最大值,最小值,求和

<span style="color:#333333;">func 計算(var 數組:[Int])->(max:Int , min:Int , sum:Int){
    var max = 數組[0]
    var min = 數組[0]
    var sum = 0
    
    for item in 數組{
        
        if max < item{
            max = item
        }
        if min > item{
            min = item
        }

        sum += item
    }
    return (max,min,sum)
}

let 計算結果 = 計算([6743,476,378,354,34])
print(計算結果)
print("max = \(計算結果.max),min = \(計算結果.min),sum = \(計算結果.sum)")</span>
輸出結果如下:

<span style="color:#333333;">(6743, 34, 7985)
max = 6743,min = 34,sum = 7985</span>


1、swift 中函數可以嵌套函數

func returnFifteen() ->Int{
    
    var ten = 10
    func addFive(){
        ten += 5
    }
    
    addFive() // 調用一次輸出15,自加5
    addFive() // 調用2次輸出20
    addFive() // 調用3次輸出25
    return ten
}
print(returnFifteen())

2、函數作爲返回值的情況 返回函數的參數列表 -> 返回函數的返回值

<span style="color:#009900;">func makeFunc()->(Int->Int){
    func addFive(a:Int)->Int{
        return a+5
    }
    return addFive
}
var func1 = makeFunc()
print(func1(12))</span>
輸出結果爲 17


函數小練習2

實現makeComputerFunc 這個函數,傳入一個 +—*/。返回值返回一個函數,調用函數傳入兩個值,然後返回計算結果

<span style="color:#333333;">func makeComputerFunc(operation:String)->((Int,Int)->Int){
    switch operation{
        case "+":
            func jia(a:Int,b:Int)->Int{
                return a+b
        }
        return jia
        
        case "-":
            func jian(a:Int,b:Int)->Int{
                return a-b
        }
        return jian
        
        case "*":
        func cheng(a:Int,b:Int)->Int{
            return a*b
        }
        return cheng
        
        case "/":
        func chu(a:Int,b:Int)->Int{
            return a/b
        }
        return chu
        
        default:
        func ni(a:Int,b:Int)->Int{
            return 0
        }
        return ni
    }
    
}

var 結果 = makeComputerFunc("+")
print(結果(5,10))</span>
輸出結果爲 15


3、函數作爲參數的情況

//第一層函數,參數爲一個數組。和一個比較的函數。返回值是一個bool類型

//比較函數,判斷第一層函數傳入的數組中是否後大於10的數,如果大於10,返回true,如果小於10,返回false

<span style="color:#666666;">func hasAnyMatches(numbers:[Int],condition:(Int)->Bool)->Bool{
    
    for num in numbers{
        if condition(num){
            return true
        }
    }
    return false
}

func moreThanTen (num:Int)->Bool{
    if num > 10{
        return true
    }else{
        return false
    }
}

print(hasAnyMatches([2,5,2,3,4,2,12,4], condition: moreThanTen))</span>








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章