当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。和As3的Vector类型很像。
var arr:String[]=String[]()
字典:Dictionary
同数组一样,AS能中的key和value对类型没有限制。而Swift必须是相同类型的key和value
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”: }
Swift的case更加精彩些例如:
多值匹配
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"))
嵌套函数
As3和Swift都很欢快的支持了
闭包
As3和Swift都支持
(我感觉它们两个都很萌萌哒,不知道它们今天吃药了没)