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>








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值