• 初学swift笔记 函数(六)


      1 import Foundation
      2 /*
      3 func 函数名 (参数名:参数类型) {
      4 
      5 }
      6 func 函数名 (参数名:参数类型) ->Void{
      7 
      8 }
      9 func 函数名 (参数名:参数类型) ->返回类型{
     10 
     11 }
     12 */
     13 func show_Array(tempArray: [Int]){
     14     for a in tempArray {
     15         println("(a)")
     16     }
     17     
     18 }
     19 func show_Arrays(tempArray:Array<Any>){
     20     for a in tempArray {
     21         println("(a)")
     22     }
     23     
     24 }
     25 //show_Array([2,3,4,5,6,2,1,3,2])
     26 //show_Arrays([2,3,"abc"])
     27 func maxOfValue(start : Int ,end : Int)->Int {
     28     if start>end {
     29         return start
     30     }
     31     return end
     32 }
     33 var temp = maxOfValue(9,2)
     34 println(temp)
     35 
     36 func showHello(){
     37     println("Hello World")
     38 }
     39 showHello()
     40 
     41 //返回多个值 即返回一个元组类型
     42 func returnMoreValue(t1:(Double,Double),t2:(Double,Double)) ->(Double,height:Double) {
     43     return (abs(t1.0-t2.1),abs(t1.1-t2.0))
     44 }
     45 
     46 func returnMoreValue_1(t1:(Double,Double),t2:(Double,Double)) ->(Double,Double) {
     47     return (abs(t1.0-t2.1),abs(t1.1-t2.0))
     48 }
     49 //函数的内部参数和外部参数
     50 func returnMoreValue_2(t1 a: Double,t2 b: Double) ->Double {
     51     //使用时只能用内部参数
     52     return a/b
     53 }
     54 //函数的内部参数和外部参数 与 returnMoreValue_2相同
     55 func returnMoreValue_3(#t1: Double,#t2: Double) ->Double {
     56     //使用时只能用内部参数
     57     return t1/t2
     58 }
     59 
     60 let p0 : (Double,Double) = (0,0)
     61 let p1 : (Double,Double) = (4,4)
     62 let p_v=returnMoreValue(p0,p1)
     63 println(p_v.width)
     64 //调用 函数传递外部参数
     65 println(returnMoreValue_2(t1: 3.3, t2: 2.3))
     66 println(returnMoreValue_3(t1: 4, t2: 6.6))
     67 
     68 //默认参数
     69 func joinString(s1: String ,toString s2: String ,joiner s3: String = " && ")->String {
     70     
     71     return s1+s3+s2
     72 }
     73 func joinString1(s1: String ,toString s2: String ,joiner: String = " && ")->String {
     74     
     75     return s1+joiner+s2
     76 }
     77 
     78 let str=joinString("hello", toString: "world", joiner: "#")
     79 println(str)
     80 
     81 let stra=joinString("hello", toString: "world")
     82 println(stra)
     83 joinString1("lsq", toString: "Liu", joiner: "#")
     84 joinString1("lsq", toString: "Liu")
     85 
     86 //参数的常量和变量
     87 //传递给函数的参数默认是常量,不可以修改 如果想修改参数的值,需要在参数定义的时候指定参数变量形式 var
     88 func swap(a: Int ,var b: Int) {
     89     let t=b
     90     b=a
     91 }
     92 //输入输出 函数inout 类似于c#中的值类型与引用类型
     93 func swap1(inout a : Int ,inout b : Int){
     94     let t=a
     95     a=b
     96     b=t
     97 }
     98 
     99 var x=10
    100 var y=11
    101 swap1(&x, &y) //& 表示传递变量地址
    102 println("(x),(y)")
    103 
    104 //变参函数
    105 //不确定参数的个数
    106 //通常写法
    107 func add(array: [Int])->Int{
    108     var sum=0
    109     for i in array {
    110         sum+=i
    111     }
    112     return sum
    113 }
    114 //标准写法 参数个数不确定多时候 变量名: 类型...
    115 func add1(array: Int...)->Int{
    116     var sum=0
    117     for i in array {
    118         sum+=i
    119     }
    120     return sum
    121 }
    122 var temp_t = add([2,1,3,4,12,3])
    123 println(temp_t)
    124 
    125 var temp1=add1(2,3,3,4,1,23,1,44)
    126 println(temp1)
    127 
    128 //函数的类型
    129 //给函数总结一下类型 (Int,Int)->Int
    130 func m_add(a: Int ,b: Int)->Int{
    131     return a+b
    132 }
    133 func m_sum(a: Int,b: Int)->Int{
    134     return a-b
    135 }
    136 //定义函数类型的变量
    137 var calFunc:(Int,Int)->Int = m_add;
    138 //定义了参数 那么调用函数
    139 println(calFunc(3,2))
    140 calFunc = m_sum
    141 println(calFunc(4,6))
    142 
    143 //闭包 可以理解为匿名函数 有参数有返回值 没有函数名称
    144 //嵌套函数
    145 /*
    146 闭包表达式语法
    147 {
    148     (参数) -> 返回值类型 in
    149         执行语句
    150 }
    151 
    152 in 用来分割类型及执行语句
    153 
    154 */
    155 //定义一个闭包表达式常量
    156 let sayHello = {
    157         println("无参数无返回值的匿名函数,即闭包表达式")
    158 }
    159 //调用
    160 sayHello()
    161 
    162 //定义一个闭包表达式的常量 ,add_b类型是(Int,Int)->Int
    163 let add_b = {(a: Int,b: Int)-> Int in
    164     return a+b
    165 }
    166 //调用
    167 println(add_b(4,6))
    168 
    169 //闭包表达式 回调用法 常用用法 将闭包作为一个函数的回调
    170 
    171 
    172 func showArray(array : [Int]) {
    173     for a in array {
    174         //print("(a) ")
    175     }
    176     println(array)
    177 }
    178 
    179 //普通的 冒泡排序
    180 func bubbleSort(inout array: [Int]){
    181     let cnt=array.count
    182     for var i = 1; i < cnt; i++ {
    183         for var j = 0; j < cnt-i; j++ {
    184             if (array[j] > array[j+1]) {
    185                 var t = array[j]
    186                 array[j] = array[j+1]
    187                 array[j+1] = t
    188             }
    189         }
    190     }
    191 }
    192 var array: Array<Int>=[9,8,7,6,5,10,4,2,1]
    193 show_Array(array)
    194 bubbleSort(&array)
    195 println(array)
    196 
    197 //用闭包改造
    198 func bubbleSort1(inout array: [Int],cmp:(Int,Int) -> Int){
    199     let cnt=array.count
    200     for var i = 1; i < cnt; i++ {
    201         for var j = 0; j < cnt-i; j++ {
    202             if (cmp(array[j],array[j+1]) == -1) {
    203                 var t = array[j]
    204                 array[j] = array[j+1]
    205                 array[j+1] = t
    206             }
    207         }
    208     }
    209 }
    210 var array_b1=[9,8,7,6,5,10,4,2,1]
    211 //定义一个比较 闭包
    212 let intCmp = {
    213     (a: Int,b: Int) -> Int in
    214     if a>b{
    215         return -1
    216     }else if a<b {
    217         return 1
    218     }else {
    219         return 0
    220     }
    221 }
    222 //可以这么调用
    223 bubbleSort1(&array_b1,intCmp)
    224 //也可以这么调用 这种方式较多人用
    225 bubbleSort1(&array_b1,{
    226     (a: Int,b: Int) -> Int in
    227     if a>b{
    228         return -1
    229     }else if a<b {
    230         return 1
    231     }else {
    232         return 0
    233     }
    234 })
    235 println(array_b1)
    236 
    237 /*
    238 闭包表达式的优化
    239 1.类型 返回值 让编译器去推断
    240 */
    241 bubbleSort1(&array_b1,{
    242     (a,b) in
    243     if a>b{
    244         return -1
    245     }else if a<b {
    246         return 1
    247     }else {
    248         return 0
    249     }
    250 })
    251 println(array_b1)
    252 /*
    253 2.变量名称优化缩写
    254 第一个参数 $0 后面的参数以此类推 $1 $2 $3 ...
    255 */
    256 bubbleSort1(&array_b1,{
    257     let a = $0 , b = $1
    258     if a>b{
    259         return -1
    260     }else if a<b {
    261         return 1
    262     }else {
    263         return 0
    264     }
    265 })
    266 println(array_b1)
    267 //3.简单的闭包表达式代码可以更简洁
    268 
    269 /*
    270 {
    271   (a: Int,b: Int) -> Bool in
    272     return a > b
    273 }
    274 优化:
    275 {
    276     return $0 > $1
    277 }
    278 
    279 优化:
    280 {
    281     $0 > $1
    282 }
    283 
    284 */
    285 
    286 //尾随闭包
    287 //当闭包表达式是函数的最后一个参数时可以用尾随闭包的书写方式,即将闭包表达式写在函数后面,如
    288 bubbleSort1(&array_b1){
    289     let a = $0 , b = $1
    290     if a>b{
    291         return -1
    292     }else if a<b {
    293         return 1
    294     }else {
    295         return 0
    296     }
    297 }
    298 println(array_b1)
    299 //优化尾随闭包
    300 bubbleSort1(&array_b1){
    301     if $0>$1{
    302         return -1
    303     }else if $0<$1 {
    304         return 1
    305     }
    306     return 0
    307 }
    308 println(array_b1)
    309 
    310 
    311 //嵌套函数  值捕获
    312 
    313 //定义一个函数,范围值是一个闭包类型  函数中定义一个函数,函数中返回一个函数
    314 func get_value(inc: Int) -> (Int)->Int {
    315     func incFunc(v: Int) -> Int{
    316         return inc+v
    317     }
    318     return incFunc
    319 }
    320 
    321 func get_value1(inc: Int) -> (Int)->Int {
    322     var mt = 0
    323     func incFunc(v: Int) -> Int{
    324         mt++
    325         return inc+v+mt
    326     }
    327     return incFunc
    328 }
    329 let incFunc1=get_value(7)//声明一个变量,调用get_value函数,得到闭包 即该变量是一个闭包
    330 println(incFunc1(10))//调用闭包
    331 
    332 let incFunc2=get_value1(7)
    333 println(incFunc2(10))
    334 println(incFunc2(10))
     
  • 相关阅读:
    Java ClassLoader机制
    Spring JMS
    MySQL权限分配
    Java参数传递机制
    JVM装载过程
    PowerDesigner15使用时的十五个问题
    修改当前行 传值
    WebSphere MQ
    Hibernate Search牛刀小试 (转)
    关于hibernate的缓存使用
  • 原文地址:https://www.cnblogs.com/lsqandzy/p/4908921.html
Copyright © 2020-2023  润新知