2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 当AS3遇见Swift

当AS3遇见Swift

时间:2020-05-30 22:52:26

相关推荐

当AS3遇见Swift

从Hello开始

As3

trace(“Hello Eko”)复制代码

Swift

println(“Hello Eko”)复制代码

挺象,有点隔壁王叔叔的意思。

常量和变量

As3

public var str1:String=”eko”//变量

public const str2:String=”eko”//常量复制代码

Swift

var str1:String=”eko” //变量 let str2:String=”eko” //常量复制代码

在swift中没有public private protected等修饰符号。同as3一样,swift中类型(:String,:Int)的标注也不是必须的。Swift可以推导出类型。

注释

As3与Swift是一样的

//我是一行注释/* 我是多行注释*/复制代码

分号

A3和Swift一样,都不强制要求在每条语句的结尾使用分号

整数

As3 提供了int和uint类型。其中int是32位带符号的整数。而unit是32位无符号整数。

Swift提供了Int和Uint类型。在32位平台上,Int长度为32位(Int32),在64位平台上则是64位(Int64)。Uint同Int。

浮点

As3,只有Number(53位)

Swift有Double(64位)和Float(32位)

布尔值

As3 中是Boolean

Swift 中是Bool

它们的布尔值有相同的常量true和false

元组

定义:把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型

As3 没有

Swift有

可选类型(optionals)

定义:如果有值就返回当前值,如果没有值就返回nil

这是Swift中独有的

if语句

As3的条件判断需要加”()”括号

if(name==”eko”){}复制代码

Swift可以省略

if name==”eko” {}复制代码

默认值

As3

int:0

unit:0

String:null

Number:NaN

Array:null

Object:null

Boolean:flase

Swift 没有默认值,只有当类型被声明为可选类型的时候,会被自动设置为nil

var eko:String?//加了问号(?)就变成可选类型了

那么在eko被赋值之前就是nil

赋值运算符

As3与Swift都使用“=”等号

数值运算

加减乘除等(+,-,*,/)AS3和Swift在这方面倒没什么不同。包括字符串的拼接也一样

“hello ”+”eko”。如果有一个变量str=“eko”,那么他怎么和字符串拼接呢。

As3

“hello ”+str复制代码

Swift

“hello \(str)”复制代码

区间运算

As3无

Swift有

例子:

for index in 1...5 {println("\(index) * 5 = \(index * 5)")}// 1 * 5 = 5// 2 * 5 = 10// 3 * 5 = 15// 4 * 5 = 20// 5 * 5 = 25复制代码

这里面1…5就是一个闭区间

逻辑运算

相同

逻辑非( !a )

逻辑与( a && b )

逻辑或( a || b )

字符串: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”:fallthroughcase “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都支持

As3

Swift中似乎没有包,包路径的概念。因而显得简洁的多。

package{public class ShuaiGe{}}

Swift类

class ShuaiGe{}

类的构造

As3有构造函数,Swift有构造器,不同的是Swift可以有多个同名但是不同参数的构造器

As3

class ShuaiGe{function ShuaiGe(){}//构造函数}

Swift

class ShuaiGe{init(){} //构造器init(name:String){} //构造器init(age:Int){} //构造器}

类的析构

析构函数在实例被销毁前调用。As3无,Swift有

Swift

deinit{// 执行析构过程}

类的继承

As3使用关键字extends Swift使用冒号

As3

package{public class Eko extends Shuaige{}}

Swift

class Eko:ShuaiGe{}

类的属性

关于类的属性,Swift就比As3精彩的多了例如@lazy延迟存储,属性监视器willSet在设置新值之前调用。didSet在新值设置之后调用。

类的静态属性

As3使用关键字static

Swift类使用class关键字,结构体和枚举使用static关键字

类属性的覆盖

都使用override关键字,能够对方法和属性进行覆盖。

Swift使用@final能够防止覆盖例如

@final var, @final func, @final class func 以及 @final sunscript

As3

使用final关键字在class前或者后表示不能继承。使用 private关键字能表示属性或方法私有而不能被覆盖

类的实例本身

As3 使用this关键字,Swfit使用self关键字。

自动引用计数器

As3和Swift都是使用计数器来跟踪和管理内存,进行垃圾回收。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。