首先接着上次的说一下swift的强大推理能力~
先附上一段代码,看过代码也就明白了~
先声明一个枚举变量,op
private enum Op:{
case Operand(Double)
case UnaryOperation(String, Double -> Double)
case BinaryOperation(String, (Double,Double) -> Double)
}
接下来是一个字典类型的变量,所谓字典,其实就和java里面的map类似,只不过,和一个key相对的不仅仅可以是一个变量,甚至可以是一个函数!是不是很腻害~
privatevar knownOps = [String:Op]()
下面就是见证奇迹的时刻咯~
UnaryOperation和BinaryOperation都是枚举变量op生命的函数,下面的这一段代码,其实是在给knownOps做初始化的设置,以BinaryOperation为例,第一个参数是String类型,第二个参数是一个方法,该方法输入类型是两个double,返回值依旧为double。该方法如下所示可以写在括号外面:例如Op.BinaryOperation("÷") { $1/$0 }。$符号的含义想必大家都懂的喔~只需要写{ $1/$0 }酱紫的句子,swift就能明白了,这个函数的功能是,第二个参数除以第一个参数,并将该值返回~因为函数功能简单,所以连return都可以省略~
knownOps["×"] =Op.BinaryOperation("×",*)
knownOps["÷"] =Op.BinaryOperation("÷") { $1/$0 }
knownOps["+"] =Op.BinaryOperation("+",+)
knownOps["−"] =Op.BinaryOperation("−") { $1-$0 }
knownOps["√"] =Op.UnaryOperation("√",sqrt)
是不是超级高大上,我和我的小伙伴都惊呆了~
继续学习swift开发的路上,发现苹果的底层封装都非常完美~开发者只需要做很简单的工作,就可以搭建起来手感很好的app。
搭建界面也比较轻松,因为autolayout用起来很方便。从右下方的元素中拖拽需要的控件到view controller中,然后按住ctrl对其加以约束(constrains)。右边的size inspector中可以显示出其约束们的信息,开发者可以对它们进行编辑和删除等等~调整完毕后,应该是木有报错才对,之后选择update frames,bingo大功告成了。布局成功以后,成就感满满的~
其实调节布局并非易事,因为不同的设备显示界面并不相同,根据设备的高宽,在size class中分为常规regular和压缩(compact?好像是这么拼吧),举个栗子��来说,爱疯6竖屏的时候的高度就是regular,而宽度就是compact;但是横过来呢,不管是高度还是宽度,就都变成了compact~布局的时候应该考虑到不同设备屏幕大小~和屏幕旋转时的问题~今天就到这里啦~作为一只兔子要去蹦跶一会儿了~