加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift 学习笔记一

发布时间:2020-12-14 02:04:44 所属栏目:百科 来源:网络整理
导读:看 Developing IOS 8 Apps with swift 的时候看到一些比较有用的点,记录一下: 1、将函数作为参数传递。例如: 写一个两个数求和的函数: performOperation(multiply) func performOperation(operation:(Double,Double) - Double) { if operandStack.count

看 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,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 一节。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读