zoukankan      html  css  js  c++  java
  • 当As3遇见Swift(二)

    字符串:String

    都是用String来表示,都是值类型,在传递过程中都会进行拷贝。

    计算字符数量

    As3

    str.length

    Swift

    countElements(str)

    数组:Array

    As3:存数任意数据

    var arr:Array=new Array();
    var vec:Vector.<String>=new Vector.<String>;

    Swift:必须存储相同类型的数据,比如都是Int,或者都是String。和As3Vector类型很像。

    var arr:String[]=String[]()

    字典:Dictionary

    同数组一样,AS能中的keyvalue对类型没有限制。而Swift必须是相同类型的keyvalue

    As3

    var dict = new Dictionary();

    Swift

    var dict:Dictionary<String,String>= Dictionary<String,String>()

    控制流程

    if for while switch 一个都没少

    基本都差不多,比较有意思的是switch

    Swift中的switch不需要显式的break,而As3则相反

    As3

    switch(a)
    {
      case “eko”:
        break;
      case “fancy”:
        break;
    }

    Swift

    switch(a){
    case “eko”:
    case “fancy”:
    }

    As3如果去掉break就会造成代码向下贯通执行两个case分支。而Swift想要向下贯通则需加入fallthrough

    switch(a){
    case “eko”:
    fallthrough
    case “fancy”:
    }

    Swiftcase更加精彩些例如:

    多值匹配

    case “a”,”b”,”c”,”d”:

    区间匹配

    case 1...3:

    元组匹配

    case (0,0):

    还能使用where

    case let (x,y) where x==y:

    函数

    As3

    function onSayHi():String
    {
        //做些有趣的事情吧
    }

    Swift

    func onSayHi()->String{
    //做点什么呢
    }

    返回值类型 As3是用冒号“:”,Swift是用一个箭头“->”。两个合体看上去就像两个鸡蛋一根火腿肠:->,竖起来的话看上去像是一根很邪恶的东西呢。

    如果无返回值,As3中要写void,Swift可以省略

    As3

    function onSayHi():void{}

    Swift

    func onSayHi(){}

    函数的参数

    一般情况下两者没什么区别

    As3

    function onSayHi(name:String):void{}

    Swift

    func onSayHi(name:String){}

    如果以为Swift不过如此的话,那就图样图森破了。

    Swift中可以有参数别名。供调用函数时使用,例如

    //定义函数
    func onSayHi(who name:String){
        pringln(“hi (name)”)
    }
    //who 就是参数别名供外部使用,name供函数内部使用
    onSayHi(who:”eko”)

    通常来说,参数别名从函数的第二个参数开始使用。我偷懒了,别太在意细节。

     关于参数,As3变量,可以重新赋值。而Swift常量,不可重新赋值。

    As3

    function onSayHi(name:String):void
    {
        name=”fancy”;
        trace(name);
    }
    
    onSayHi(“eko”)  //输出fancy,说明在函数内部,参数name被改变了。

    Swift

    func onSayHi(name:String){
        name=”fancy” //直接报错了
    }

    如果要像As3那样就要在参数名前加前缀var

    func onSayHi(var name:String){
        name=”fancy”
    }
    onSayHi(“eko”)//输出 name:fancy

    将函数作为参数

    As3

    function onSayHi(name:String):String
    {
        return “hello ”+name;
    }
    
    function onSay(name:String,fun:Function)
    {
        trace(fun(name));
    }
    
    onSayHi(“eko”,onSayHi) //输出hello eko,函数onSay将函数onSayHi作为参数使用 

    Swift

    func onSayHi(name:String)->String{
        return “hello (name)”
    }
    
    function onSay(name:String,fun:(String)->String){
        println(fun(name))
    }
    
    onSay(“eko”,onSayHi) //输出hello eko

    以上可以看出As3中将函数作为参数时只需用一个Function 解决一切问题。而在Swift中需要将参数类型和返回类型都表示清楚:

    (String)->String  //括号中的就是参数类型,箭头后面的就是返回类型。

    将函数作为返回类型

    关键点同上

    As3

    public function onSayHi(name:String):String
    {
        return "hello "+name;
    }
    public function onGetFun():Function
    {
        return onSayHi;
    }
    
    var fun:Function=onGetFun();
    trace(fun("eko")); //输出 hello eko

    Swift

    func onSayHi(name:String)->String{
        return "hello (name)"
    }
    
    func onGetFun()->(String)->String{
        return onSayHi
    }
    
    var fun:(String)->String=onGetFun()
    println(fun("eko"))

    嵌套函数

    As3Swift都很欢快的支持了

    闭包

    As3Swift都支持

     

    (我感觉它们两个都很萌萌哒,不知道它们今天吃药了没)

  • 相关阅读:
    java矩阵运算包ujmp中的一些小示例和注意事项
    CSS文字段落排版常用设置
    HTML中标签元素的分类
    三种CSS样式-内联、嵌入、外部
    MySQL常用命令
    解决谷歌浏览器在win8下没有注册类的问题
    转:jQuery.lazyload详解使用方法
    php取整
    限制表单Input的长度,当达到一定长度时不能再输入
    滑动后定位
  • 原文地址:https://www.cnblogs.com/sandal1980/p/3789507.html
Copyright © 2011-2022 走看看