当AS3遇见Swift
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当AS3遇见Swift相关的知识,希望对你有一定的参考价值。
从Hello开始
As3
1. trace(“Hello Eko”)
Swift
1. println(“Hello Eko”)
挺象,有点隔壁王叔叔的意思。
常量和变量
As3
1. public var str1:String=”eko”//变量
2. public const str2:String=”eko”//常量
Swift
1. var str1:String=”eko” //变量
2. let str2:String=”eko” //常量
在swift中没有public private protected等修饰符号。同as3一样,swift中类型(:String,:Int)的标注也不是必须的。Swift可以推导出类型。
注释
As3与Swift是一样的
1. //我是一行注释
2. /*
3. 我是多行注释
4. */
分号
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的条件判断需要加”()”括号
1. if(name==”eko”)
Swift可以省略
1. 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
1. “hello ”+str
Swift
1. “hello \\(str)”
区间运算
As3无
Swift有
例子:
1. for index in 1...5
2. println("\\(index) * 5 = \\(index * 5)")
3.
4. // 1 * 5 = 5
5. // 2 * 5 = 10
6. // 3 * 5 = 15
7. // 4 * 5 = 20
8. // 5 * 5 = 25
复制代码
这里面1…5就是一个闭区间
逻辑运算
相同
逻辑非( !a )
逻辑与( a && b )
逻辑或( a || b )
字符串:String都是用String来表示,都是值类型,在传递过程中都会进行拷贝。
计算字符数量
As3:
1. str.length
Swift:
1. countElements(str)
数组:Array
As3:存数任意数据
1. var arr:Array=new Array();
2. var vec:Vector.<String>=new Vector.<String>;
复制代码
Swift:必须存储相同类型的数据,比如都是Int,或者都是String。和As3的Vector类型很像。
1. var arr:String[]=String[]()
字典:Dictionary
同数组一样,AS能中的key和value对类型没有限制。而Swift必须是相同类型的key和value
As3
1. var dict = new Dictionary();
复制代码
Swift
1. var dict:Dictionary<String,String>= Dictionary<String,String>()
控制流程
if for while switch 一个都没少
基本都差不多,比较有意思的是switch
Swift中的switch不需要显式的break,而As3则相反
As3
1. switch(a)
2.
3. case “eko”:
4. break;
5. case “fancy”:
6. break;
7.
复制代码
Swift
1. switch(a)
2. case “eko”:
3. case “fancy”:
4.
As3如果去掉break就会造成代码向下贯通执行两个case分支。而Swift想要向下贯通则需加入fallthrough
1. switch(a)
2. case “eko”:
3. fallthrough
4. case “fancy”:
5.
复制代码
Swift的case更加精彩些例如:
多值匹配
1. case “a”,”b”,”c”,”d”:
复制代码
区间匹配
1. case 1...3:
元组匹配
1. case (0,0):
还能使用where
1. case let (x,y) where x==y:
函数
As3
1. function onSayHi():String
2.
3. //做些有趣的事情吧
4.
Swift
1. func onSayHi()->String
2. //做点什么呢
3.
返回值类型 As3是用冒号“:”,Swift是用一个箭头“->”。两个合体看上去就像两个鸡蛋一根火腿肠:->,竖起来的话看上去像是一根很邪恶的东西呢。
如果无返回值,As3中要写void,Swift可以省略
As3
1. function onSayHi():void
1. func onSayHi()
函数的参数
一般情况下两者没什么区别
As3
1. function onSayHi(name:String):void
Swift
1. func onSayHi(name:String)
如果以为Swift不过如此的话,那就图样图森破了。
在Swift中可以有参数别名。供调用函数时使用,例如
1. //定义函数
2. func onSayHi(who name:String)
3. pringln(“hi \\(name)”)
4.
5. //who 就是参数别名供外部使用,name供函数内部使用
6.
7. onSayHi(who:”eko”)
通常来说,参数别名从函数的第二个参数开始使用。我偷懒了,别太在意细节。
关于参数,As3是变量,可以重新赋值。而Swift是常量,不可重新赋值。
As3
1. function onSayHi(name:String):void
2.
3. name=”fancy”;
4. trace(name);
5.
6. onSayHi(“eko”) //输出fancy,说明在函数内部,参数name被改变了。
Swift
1. func onSayHi(name:String)
2. name=”fancy” //直接报错了
3.
如果要像As3那样就要在参数名前加前缀var
1. func onSayHi(var name:String)
2. name=”fancy”
3.
4. onSayHi(“eko”)//输出 name:fancy
将函数作为参数
As3
1. function onSayHi(name:String):String
2.
3. return “hello ”+name;
4.
5. function onSay(name:String,fun:Function)
6.
7. trace(fun(name));
8.
9. onSayHi(“eko”,onSayHi) //输出hello eko,函数onSay将函数onSayHi作为参数使用
Swift
1. func onSayHi(name:String)->String
2. return “hello \\(name)”
3.
4. function onSay(name:String,fun:(String)->String)
5. println(fun(name))
6.
7. onSay(“eko”,onSayHi) //输出hello eko
以上可以看出As3中将函数作为参数时只需用一个Function 解决一切问题。而在Swift中需要将参数类型和返回类型都表示清楚:
(String)->String //括号中的就是参数类型,箭头后面的就是返回类型。
将函数作为返回类型
关键点同上
As3
1. public function onSayHi(name:String):String
2.
3. return "hello "+name;
4.
5. public function onGetFun():Function
6.
7. return onSayHi;
8.
9. var fun:Function=onGetFun();
10. trace(fun("eko")); //输出 hello eko
Swift
1. func onSayHi(name:String)->String
2. return "hello \\(name)"
3.
4. func onGetFun()->(String)->String
5. return onSayHi
6.
7. var fun:(String)->String=onGetFun()
8. println(fun("eko"))
嵌套函数
As3和Swift都很欢快的支持了
闭包
As3和Swift都支持
类
As3
Swift中似乎没有包,包路径的概念。因而显得简洁的多。
package
public class ShuaiGe
Swift类
class ShuaiGe
类的构造
As3有构造函数,Swift有构造器,不同的是Swift可以有多个同名但是不同参数的构造器
As3
class ShuaiGe
function ShuaiGe()//构造函数
class ShuaiGe
init() //构造器
init(name:String) //构造器
init(age:Int) //构造器
类的析构
析构函数在实例被销毁前调用。As3无,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都是使用计数器来跟踪和管理内存,进行垃圾回收。
以上是关于当AS3遇见Swift的主要内容,如果未能解决你的问题,请参考以下文章
如果要求是 Textview 应该显示最多 4 行的完整文本,那么如何设置 textview 的高度,然后它应该在 swift 3 中滚动?
ivew Table 固定列设置后,底部拖拽的横轴被覆盖拉不动