• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

WelcometoSwift(苹果官方Swift文档初译与注解三十五)---248~253页(第五章--函数完) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Function Types as Return Types (函数类型作为返回值类型)

  一个函数的类型可以作为另一个函数的返回值类型.可以在一个函数的返回值箭头后面写上一个完整的函数类型.

  例如:

  下面的例子定义了两个简单的函数,分别为stepForward 和 stepBackward.其中stepForward函数返回值比它的输入值多1,stepBackward函数返回值比它输入值少1.这两个函数的  类型都是(Int) -> Int:

    func stepForward(input: Int) -> Int {

        return input + 1

    }

    func stepBackward(input: Int) -> Int {

        return input - 1

    }

  这里有一个函数chooseStepFunction,它的返回类型是一个函数类型(Int) -> Int.函数chooseStepFunction根据它的布尔类型的参数返回stepForward函数类型或者stepBackward函  数类型 :

    func chooseStepFunction(backwards: Bool) -> (Int) -> Int {

        return backwards ? stepBackward : stepForward

    }

  现在你可以使用chooseStepFunction获得一个函数:

    var currentValue = 3

    let moveNearerToZero = chooseStepFunction(currentValue > 0)

    // moveNearerToZero now refers to the stepBackward() function

    moveNearerToZero将根据适当的函数来计算,一直到零:

    println("Counting to zero:")

    // Counting to zero:

    while currentValue != 0 {

        println("\(currentValue)... ")

        currentValue = moveNearerToZero(currentValue)

    }

    println("zero!")

    // 3...

    // 2...

    // 1...

    // zero!

Nested Functions (函数嵌套)

  你可以在一个函数体内定义另一个函数,这种情况叫做嵌套函数.

  默认情况下,嵌套的函数对外界是不知的.但可以通过封装它的函数来调用它.封装它的函数可以将它作为函数的返回值返回,这样可以允许嵌套的函数在其他范围使用.

  代码样例:

    func chooseStepFunction(backwards: Bool) -> (Int) -> Int {

        func stepForward(input: Int) -> Int { return input + 1 }

        func stepBackward(input: Int) -> Int { return input - 1 }

        return backwards ? stepBackward : stepForward

    }

    var currentValue = -4

    let moveNearerToZero = chooseStepFunction(currentValue > 0)

    // moveNearerToZero now refers to the nested stepForward() function

    while currentValue != 0 {

        println("\(currentValue)... ")

        currentValue = moveNearerToZero(currentValue)

    }

    println("zero!")

    // -4...

    // -3...

    // -2...

    // -1...

    // zero!

/********************本章完......************************/


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
cinderswift的区别发布时间:2022-07-13
下一篇:
swiftMD5加密方法发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap