• Swift 中的函数(下)


    学习来自《极客学院:Swift中的函数》

    工具:Xcode6.4 

    直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会

     1 import Foundation
     2 
     3 /***********嵌套函数*************/
     4 func getMathFunc(#type: String) -> (Int) -> Int{
     5     func squre(num:Int) -> Int{
     6         return num*num
     7     }
     8     func cube(num:Int) -> Int{
     9         return num*num*num
    10     }
    11     switch(type){
    12         case "square":
    13         return squre
    14     default:
    15         return cube
    16     }
    17 }
    18 var mathfunc = getMathFunc(type: "other")
    19 println(mathfunc(4))
    20 //由于嵌套函数在外函数内部只作用于该函数内部,所以使用闭包简化这个嵌套函数
    21 
    22 /***********闭包*************/
    23 /*
    24 { (形参列表) -> (返回值) in
    25     可执行语句
    26 }
    27 */
    28 func getMathFunc_1(#type: String) -> (Int) -> Int{
    29 //    func squre(num:Int) -> Int{
    30 //        return num*num
    31 //    }
    32 //    func cube(num:Int) -> Int{
    33 //        return num*num*num
    34 //    }
    35     switch(type){
    36     case "square":
    37         return {
    38             (num:Int) -> Int in
    39             return num * num
    40         }
    41     default:
    42         return {
    43             (num:Int) ->Int in
    44             return num * num * num
    45         }
    46     }
    47 }
    48 var mathfunc_1 = getMathFunc_1(type: "other")
    49 println(mathfunc_1(5))
    50 //利用上下文推断类型
    51 var squre1: (Int) -> Int = {(num) in return num*num }
    52 println(squre1(8))
    53 var squre2: (Int) -> Int = {num in return num*num }
    54 println(squre2(9))
    55 //省略形参名,通过$0,$1...来引用第一个、第二个参数
    56 var squre3: (Int) -> Int = {$0 * $0}
    57 println(squre3(10))
    58 
    59 //闭包的经典使用
    60 var result: Int = {
    61     var result = 1
    62     for i in 1...$1{
    63         result *= $0
    64     }
    65     return result
    66 }(4,3)
    67 println(result)
    68 
    69 //尾随闭包
    70 func someFunction(num:Int,fn: (Int)->()){
    71     //执行代码
    72 }//第一个参数为整型,第二个参数为闭包
    73 //调用这个函数: someFunction(20,{})
    74 //使用尾随闭包调用函数的格式:someFunction(20){}
    75 
    76 //捕获上下文中的变量或者常量
    77 func makeArr(ele:String) ->() ->[String]{
    78     //创建一个不包含任何元素的数组
    79     var arr: [String] = []
    80     func addElement() -> [String]{
    81         //向arr数组中添加一个元素
    82         arr.append(ele)
    83         return arr
    84     }
    85     return addElement
    86 }
  • 相关阅读:
    vue项目页面空白
    vue使用nprogress页面加载进度条
    如何让一个div居于页面正中间
    Django项目使用七牛云存储图片
    Celery ValueError: not enough values to unpack (expected 3, got 0)的解决方案
    网站ico那点事儿
    SpringBoot2.0 + SpringCloud Eureka搭建高可用注册中心(Eureka之三)
    SpringBoot2.0+SpringCloud Eureka构建服务治理(Eureka之一)
    SpringBoot2.0+SpringCloud Eureka搭建高可用注册中心(Eureka之二)
    Synchronized重入锁
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4649020.html
Copyright © 2020-2023  润新知