一、元組
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>
傳入一個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>