字符串: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都支持
(我感觉它们两个都很萌萌哒,不知道它们今天吃药了没)