您的位置:首页 > 移动开发 > Swift

swift -2 元组,函数

2015-09-23 16:24 381 查看
一、元组

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: