• Welcome to Swift (苹果官方Swift文档初译与注解三十七)---261~265页(第六章-- 闭包)


    Inferring Type From Context 上下文类型判断

      因为排序的闭包是作为一个参数传递给函数,因此Swift可以判定这个参数的类型和根据sort函数第二个参数判断返回值的类型.这个参数的类型是(String, String) -> Bool,这意味着   String,String以及Bool类型都不需要在闭包定义的时候声明.因为所有的类型都可以由系统判定.因此,返回箭头以及参数名字的括号都可以省略:

        reversed = sort(names, { s1, s2 in return s1 > s2 } )

      当在闭包在传递给函数的时候,总是默认的会判定参数的类型和返回值的类型,因此你很少需要自己写一个标准完整的闭包格式.

      无论怎样,你可以按照你希望的样子显示的声明类型.为了避免歧义性,这样的方式是积极鼓励推荐的.在sort函数的例子中,闭包的目的是非常清晰.

    Implicit Returns from Single-Expression Closures (单表达式闭包的隐式返回)

      单表达式闭包可以通过忽略关键字return,隐式的返回单表达式的结果:

        reversed = sort(names, { s1, s2 in s1 > s2 } )

      在这里,sort函数类型的第二个参数明确的要求闭包返回一个Bool值,因为闭包体包含一个单表达式(s1 > s2),它返回一个Bool值,这样可以忽略return关键字.

    Shorthand Argument Names (缩写的参数名)

      Swift中,系统自动的为内联闭包提供了参数缩写名,$0,$1,$2..等等,它可以用来代指闭包参数的值.

      如果你在闭包表达式中使用了缩写名,你可以忽略闭包参数列表,缩写名的值和类型系统会根据函数类型推断出来,并且int关键字也可以省略.:

        reversed = sort(names, { $0 > $1 } )

      这里,$0,$1代指闭包的第一个和第二个参数.

    Operator Functions (操作函数)

      上面的闭包表达式实际上有更短的写法.

      Swift的String类型定义了一个专门的大于操作方法(>)用于有两个String类型参数的函数,它返回一个Bool类型的值,这刚刚好匹配了sort函数的第二个参数需求,因此你可以简单的传一  个大于操作(>),系统将判断出你需要的东西:

      reversed = sort(names, >)

  • 相关阅读:
    docker as engitor及云构建devops选型
    elmlang:一种编码和可视化调试支持内置的语言系统
    engitor:基于jupyter,一个一体化的语言,IDE及通用分布式架构环境
    【Heritrix基础教程之3】Heritrix的基本架构
    Eclipse 快捷键大全
    【Heritrix基础教程之2】Heritrix基本内容介绍
    【Heritrix基础教程之1】在Eclipse中配置Heritrix
    Berkeley DB基础教程
    【搜索引擎Jediael开发笔记】v0.1完整代码
    【搜索引擎Jediael开发笔记】V0.1完整代码
  • 原文地址:https://www.cnblogs.com/caios/p/3879213.html
Copyright © 2020-2023  润新知