初学swift笔记 函数(六)
import Foundation
/*
func 函数名 (参数名:参数类型) { }
func 函数名 (参数名:参数类型) ->Void{ }
func 函数名 (参数名:参数类型) ->返回类型{ }
*/
func show_Array(tempArray: [Int]){
for a in tempArray {
println("\(a)")
} }
func show_Arrays(tempArray:Array<Any>){
for a in tempArray {
println("\(a)")
} }
//show_Array([2,3,4,5,6,2,1,3,2])
//show_Arrays([2,3,"abc"])
func maxOfValue(start : Int ,end : Int)->Int {
if start>end {
return start
}
return end
}
var temp = maxOfValue(,)
println(temp) func showHello(){
println("Hello World")
}
showHello() //返回多个值 即返回一个元组类型
func returnMoreValue(t1:(Double,Double),t2:(Double,Double)) ->(width:Double,height:Double) {
return (abs(t1.-t2.),abs(t1.-t2.))
} func returnMoreValue_1(t1:(Double,Double),t2:(Double,Double)) ->(Double,Double) {
return (abs(t1.-t2.),abs(t1.-t2.))
}
//函数的内部参数和外部参数
func returnMoreValue_2(t1 a: Double,t2 b: Double) ->Double {
//使用时只能用内部参数
return a/b
}
//函数的内部参数和外部参数 与 returnMoreValue_2相同
func returnMoreValue_3(#t1: Double,#t2: Double) ->Double {
//使用时只能用内部参数
return t1/t2
} let p0 : (Double,Double) = (,)
let p1 : (Double,Double) = (,)
let p_v=returnMoreValue(p0,p1)
println(p_v.width)
//调用 函数传递外部参数
println(returnMoreValue_2(t1: 3.3, t2: 2.3))
println(returnMoreValue_3(t1: , t2: 6.6)) //默认参数
func joinString(s1: String ,toString s2: String ,joiner s3: String = " && ")->String { return s1+s3+s2
}
func joinString1(s1: String ,toString s2: String ,joiner: String = " && ")->String { return s1+joiner+s2
} let str=joinString("hello", toString: "world", joiner: "#")
println(str) let stra=joinString("hello", toString: "world")
println(stra)
joinString1("lsq", toString: "Liu", joiner: "#")
joinString1("lsq", toString: "Liu") //参数的常量和变量
//传递给函数的参数默认是常量,不可以修改 如果想修改参数的值,需要在参数定义的时候指定参数变量形式 var
func swap(a: Int ,var b: Int) {
let t=b
b=a
}
//输入输出 函数inout 类似于c#中的值类型与引用类型
func swap1(inout a : Int ,inout b : Int){
let t=a
a=b
b=t
} var x=
var y=
swap1(&x, &y) //& 表示传递变量地址
println("\(x),\(y)") //变参函数
//不确定参数的个数
//通常写法
func add(array: [Int])->Int{
var sum=
for i in array {
sum+=i
}
return sum
}
//标准写法 参数个数不确定多时候 变量名: 类型...
func add1(array: Int...)->Int{
var sum=
for i in array {
sum+=i
}
return sum
}
var temp_t = add([,,,,,])
println(temp_t) var temp1=add1(,,,,,,,)
println(temp1) //函数的类型
//给函数总结一下类型 (Int,Int)->Int
func m_add(a: Int ,b: Int)->Int{
return a+b
}
func m_sum(a: Int,b: Int)->Int{
return a-b
}
//定义函数类型的变量
var calFunc:(Int,Int)->Int = m_add;
//定义了参数 那么调用函数
println(calFunc(,))
calFunc = m_sum
println(calFunc(,)) //闭包 可以理解为匿名函数 有参数有返回值 没有函数名称
//嵌套函数
/*
闭包表达式语法
{
(参数) -> 返回值类型 in
执行语句
} in 用来分割类型及执行语句 */
//定义一个闭包表达式常量
let sayHello = {
println("无参数无返回值的匿名函数,即闭包表达式")
}
//调用
sayHello() //定义一个闭包表达式的常量 ,add_b类型是(Int,Int)->Int
let add_b = {(a: Int,b: Int)-> Int in
return a+b
}
//调用
println(add_b(,)) //闭包表达式 回调用法 常用用法 将闭包作为一个函数的回调 func showArray(array : [Int]) {
for a in array {
//print("\(a) ")
}
println(array)
} //普通的 冒泡排序
func bubbleSort(inout array: [Int]){
let cnt=array.count
for var i = ; i < cnt; i++ {
for var j = ; j < cnt-i; j++ {
if (array[j] > array[j+]) {
var t = array[j]
array[j] = array[j+]
array[j+] = t
}
}
}
}
var array: Array<Int>=[,,,,,,,,]
show_Array(array)
bubbleSort(&array)
println(array) //用闭包改造
func bubbleSort1(inout array: [Int],cmp:(Int,Int) -> Int){
let cnt=array.count
for var i = ; i < cnt; i++ {
for var j = ; j < cnt-i; j++ {
if (cmp(array[j],array[j+]) == -) {
var t = array[j]
array[j] = array[j+]
array[j+] = t
}
}
}
}
var array_b1=[,,,,,,,,]
//定义一个比较 闭包
let intCmp = {
(a: Int,b: Int) -> Int in
if a>b{
return -
}else if a<b {
return
}else {
return
}
}
//可以这么调用
bubbleSort1(&array_b1,intCmp)
//也可以这么调用 这种方式较多人用
bubbleSort1(&array_b1,{
(a: Int,b: Int) -> Int in
if a>b{
return -
}else if a<b {
return
}else {
return
}
})
println(array_b1) /*
闭包表达式的优化
1.类型 返回值 让编译器去推断
*/
bubbleSort1(&array_b1,{
(a,b) in
if a>b{
return -
}else if a<b {
return
}else {
return
}
})
println(array_b1)
/*
2.变量名称优化缩写
第一个参数 $0 后面的参数以此类推 $1 $2 $3 ...
*/
bubbleSort1(&array_b1,{
let a = $ , b = $
if a>b{
return -
}else if a<b {
return
}else {
return
}
})
println(array_b1)
//3.简单的闭包表达式代码可以更简洁 /*
{
(a: Int,b: Int) -> Bool in
return a > b
}
优化:
{
return $0 > $1
} 优化:
{
$0 > $1
} */ //尾随闭包
//当闭包表达式是函数的最后一个参数时可以用尾随闭包的书写方式,即将闭包表达式写在函数后面,如
bubbleSort1(&array_b1){
let a = $ , b = $
if a>b{
return -
}else if a<b {
return
}else {
return
}
}
println(array_b1)
//优化尾随闭包
bubbleSort1(&array_b1){
if $>${
return -
}else if $<$ {
return
}
return
}
println(array_b1) //嵌套函数 值捕获 //定义一个函数,范围值是一个闭包类型 函数中定义一个函数,函数中返回一个函数
func get_value(inc: Int) -> (Int)->Int {
func incFunc(v: Int) -> Int{
return inc+v
}
return incFunc
} func get_value1(inc: Int) -> (Int)->Int {
var mt =
func incFunc(v: Int) -> Int{
mt++
return inc+v+mt
}
return incFunc
}
let incFunc1=get_value()//声明一个变量,调用get_value函数,得到闭包 即该变量是一个闭包
println(incFunc1())//调用闭包 let incFunc2=get_value1()
println(incFunc2())
println(incFunc2())
初学swift笔记 函数(六)的更多相关文章
- 初学swift笔记 结构体(八)
import Foundation /* 和类很相似 结构体 -> 封装 属性.方法 结构体是值类型 */ //定义一个LSQ类型的结构体 关键字struct struct LSQ { var ...
- 初学swift笔记运算符(二)
swift 中的运算符 import Foundation //字符类型 var char: Character = "a" char="b" println( ...
- 初学swift笔记变量的定义(一)
swift变量的定义 1 import Foundation /* 变量的定义 变量的类型是可以不用写的 var a=10 常量的定义 let修饰 */ print(a) let b= print(b ...
- 初学swift笔记 继承(十)
import Foundation /* 继承 class childClass: FatherClass{ } 优点 代码重用 缺点 增加程序的藕合度 父类的改变会影响子类 只能单继承 */ cla ...
- 初学swift笔记 方法(九)
import Foundation /* 方法 */ //实例方法 一定需要依附于对象 class MyPoint { var x: Double = 0.0 var y: Double = 0.0 ...
- 初学swift笔记 枚举(七)
import Foundation /* 枚举 语法结构 enum 类型 { case 值 } */ //定义一个枚举 写法1 enum LiuShiQun { case Name case Age ...
- 初学swift笔记 流程控制(五)
import Foundation ; i<=; i++ { println(i) } let str1="adl;fjasdfl;ouewrouqwperuadf" for ...
- 初学swift笔记字典、数组(四)
import Foundation //字典 元素顺序是无序的 //1.字典元素是键值对 (key:value) //key 一定是可哈希的 string\int\bool var dic1=[&qu ...
- 初学swift笔记-数组、字典、元组(三)
数组的使用.字典的使用.元组的使用 import Foundation //1.定义数组 //集合数据 数组.字典 ,,,]//常用定义 ,,,]//常用定义 ,,,]//范型定义 ,,,] arr_ ...
随机推荐
- core-site.xml配置项:hadoop.tmp.dir
hadoop.tmp.dir:A base for other temporary directories. 集群运行后,修改该配置项后,发现类似错误: -- ::, INFO org.apache. ...
- Mysql自定义变量的使用
用户自定义变量是一个容易被遗忘的MySQL特性,但是如果能用的好,发挥其潜力,在某些场景可以写出非常高效的查询语句.在查询中混合使用过程化和关系化逻辑的时候,自定义变量可能会非常有用.单纯的关系查询将 ...
- Python中各种集合 list tuple set dict
list 创建list L = ['Adam','Lucy','Bart'] 索引访问: 正序(和数组类似) L[0],L[1],L[2] 倒序 L[-1]倒数第一个 L[- ...
- hightchart or hightstock 格式Y数据
hightchart or hightstock 格式Y数据,鼠标放在上面显示两位小数 方法一: tooltip: { shared: true, crosshairs: true , formatt ...
- 观察者模式模拟YUI事件机制
首先介绍下YUI的事件机制,很好理解,因为和浏览器事件机制差不多.看懂下面几个方法就可以了: publish: 创建自定义事件.第一个参数是事件类型,第二个参数是一个对象,里面可以设置默认动作 on: ...
- create custom launcher icon 细节介绍
create custom launcher icon 是创建你的Android app的图标 点击下一步的时候,出现的界面就是创建你的Android的图标 Foreground: ” Foregro ...
- 一篇memcache基础教程
Memcache是什么Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任 ...
- 创建FBI树
需求:数串由2^n个'0' '1'数串组成,对于一个数串,有01混合出现,则视为F,全0数串为B,全1数串为I. 将给定数串进行切割,如10010011可以用二叉树表示为 F(10010011) / ...
- ALLEN-XIE
ALLEN-XIE ABOUT Allen Xie是一家坚持理念至上的西装定制店.我们的价值观渗透于我们所做的每一件事中,从而确保始终遵循自己的风格.我们坚持用最高标准要求自己,因此,在制衣过程中 ...
- redhat 安装virtualbox
1.在官网下载virtual for linux 包,链接地址:https://www.virtualbox.org/wiki/Linux_Downloads.根据需要下载对应镜像. 2.由于下载的包 ...