zoukankan      html  css  js  c++  java
  • swift 学习笔记一

    看 Developing IOS 8 Apps with swift 的时候看到一些比較实用的点,记录一下:

    1、将函数作为參数传递。

    比如:

    写一个两个数求和的函数:performOperation(multiply)

            func performOperation(operation:(Double,Double) -> Double) {
                if operandStack.count >= 2 {
                    dispalayValue = operation(operandStack.removeLast(),operandStack.removeLast())
                    enter()
                }
            }
            
            func multiply(op1: Double, op2: Double) -> Double {
                return op1 * op2
            }
    以上。有更酷的实现,用闭包的方法:

    改进为:

            performOperation ({ (op1: Double, op2: Double) -> Double in
                return op1 * op2
            })
            
            func performOperation(operation:(Double,Double) -> Double) {
                if operandStack.count >= 2 {
                    dispalayValue = operation(operandStack.removeLast(),operandStack.removeLast())
                    enter()
                }
            }
    编译器会依据上下文判断类型。所以,以上的 performOperaion 又能够简化为:

            performOperation ({ (op1, op2) in
                return op1 * op2
            })
    op1,op2 的类型能够判断,当然返回类型也能够判断,故而返回类型也可省去。甚至连 return 也能够省去。

    因为编译器不强制你一定要写形參,故这里的 op1, op2 也能够省去,用 $0, $1, $2, ...... 分别代表第一个第二第三个參数等等。

    所以。上面又能够再次简化为:

            performOperation ({ op1 * op2 })
    swift 的编译器真 TMD 仅仅能,哈哈!

    等等,还没完,

    再简化为:

            performOperation () { op1 * op2 }</span>
    有个条件,就是 op1 * op2 是作为最后一个參数传递的时候就能够这样做,把函数參数移到括号外面,如上。

    其它的,假设有另外的參数的话就能够像之前的那样放在括号()里面;假设仅仅有一个參数的话。括号还能够直接去掉。例如以下:

            performOperation { op1 * op2 }
    至此,简化完成。


    2、swift 支持多态,What an amazing !

    比如。当你要求一个数的平方根的时候,而已还是想用回原来的函数 performOperation 。可是这个函数要求的形參是一个包括两个 Double 类型的函数。求平方根仅仅须要传入一个參数即可了啊,那么来改造一下这个函数吧,在写一个同名的函数 performOperation 。然后定义为仅仅须要一个形參就好了。

    注意:swift 支持在一个类中同一时候存在同名的多个函数,形參不一样就好了,就是多态啦~

    那么。再添加一个 performOperation 函数,例如以下:

            func performOperation(operation: Double -> Double) {
                if operandStack.count >= 1 {
                    dispalayValue = operation(operandStack.removeLast())
                    enter()
                }
            }
    如今就能够这样调用来计算数值平方根了。

            performOperation { sqrt($0) }

    很多其它,能够观看《Developing IOS 8 Apps with Swift》的 More Xcode and Swift, MVC 一节。

  • 相关阅读:
    linux:centos7开启指定端口,开放外网访问
    zookeeper 集群搭建
    单机安装zookeeper的3.4.7版本
    CentOS7下安装jdk1.8并配置环境变量,防火墙设置开关
    Redis分布式锁的正确实现方式
    MySQl5.7 忘记密码怎么办?
    Flink 之Window(窗口)
    Flink之Sink(文件、Kafka、Redis、Es、Mysql)
    Canal同步Mysql数据至Hbase
    Flink 之分流Select与Split
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7072912.html
Copyright © 2011-2022 走看看