//元祖
//和数组非常相似,其区别是?
// 元祖的长度是任意的、元祖中的数据类型可以是不同的类型的。
//元祖的定义
var userInfo1 = ("zhangsan","man",22)
/*
//读取元祖里的数据
print(userInfo1.1)
//或者
let (name,isMale,age) = userInfo1;
//在这里 name == "zhangsan"
print(name)
//元祖定义的第二种方法
var userInfo2 = (name:"lisi",isMale:"woman",age:22)
print(userInfo2.name)
//在元祖中,我们可以跳过我们不关心的值,用下划线带过。这样我们就访问不到userInfo1.1这个数据
let(name,_,age) = userInfo1;
//元祖中可变元祖和不可变元祖
var user1 = ("xiaohua","man","35")
print(user1.1)
user1.0 = "xiaozhang";
print("\(user1)")
let(name,isMale,age) = ("xiaohua1","man","35")
print(name)
//可选值Optional,在类型后面加个? 代表他是可选的。可选的意思是他可以为nil 也可以不为nil
var myVar : NSString? = nil
myVar = "小美"
print(myVar)
var myVar1 : String
print(myVar!)
//可选值的拆包,是因为可选值 内部封装枚举类型的Optional (+some)
//if和let 组合可以去除Optional
if let name = myVar
{
print(name)
}
//问候语 某某 类型后面必须要加 ? 打印出某某你好
var name : NSString? = nil
name = "阿呆"
var sayHi : NSString? = nil
sayHi = "hello"
sayHi = ("hello\(name!)")
print(sayHi)
//函数
//OC -(返回值类型) 方法名 (参数){
//函数的实现部分
//}
//swift 中函数的关键字 叫做 func
//func 函数名(参数) -> 返回值类型{实现部分}
//函数的声明部分与实现部分
func 问候语(name:String,day:String)->String{
return "hello,\(name),today is \(day)"
}
//函数调用
print(问候语("LiSa","星期三"))
//元祖作为函数返回值
//传入一个int 型的数组,返回最大值,最小值,和
func 计算(var 数组:[Int])->(max:Int, min:Int, sum:Int){
var max = 数组[0]
var min = 数组[0]
var sum = 0
for items in 数组{
if max < items{
max = items
}
if min > items{
min = items
}
sum += items
}
return (max,min,sum)
}
//调用这个函数
let 运行结果 = 计算([12,23,32,52,61,5,3])
print("max = \(运行结果.max),min = \(运行结果.min),sum = \(运行结果.sum)")
//swift 函数可以嵌套函数
func returnFifteen()->Int{
var ten = 10
func addFive(){
ten += 5
}
addFive()
return ten
}
print(returnFifteen())
//函数作为返回值的情况 返回函数的参数列表->返回函数的返回值
func makeFunc()->(Int->Int){
func addFive(a:Int)->Int{
return a+5
}
return addFive
}
var func1 = makeFunc()
print(func1(12))
func makeComputerFunc(Operation:String)->((Int,Int)->Int){
switch Operation{
case "+":
func add(num1:Int,num2:Int)->Int{
return num1 + num2
}
return add
case"-":
func sub(num1:Int,num2:Int)->Int{
return num1 - num2
}
return sub
case"*":
func product(num1:Int,num2:Int)->Int{
return num1*num2
}
return product
case"/":
func division(num1:Int,num2:Int)->Int{
return num1/num2
}
return division
default:
func oth(num1:Int,num2:Int)->Int{
return 0
}
return oth
}
}
var func2 = makeComputerFunc("-")
println(func2(12,6))
*/
//函数作为参数的情况
//第一层函数,参数为一个数组。和一个比较的函数。返回值是一个Bool类型
//比较函数,判断第一层函数传人的数组中是否有大于10的数,如果大于10 返回ture ,如果小于10返回false
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
}
}
println(hasAnyMatches([1,21,11,23,32],moreThanTen))