当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”:
- 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都支持
类
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都是使用计数器来跟踪和管理内存,进行垃圾回收。
当AS3遇见Swift相关推荐
- Swift之Codable自定义解析将任意数据类型解析为想要的类型
一.前言 大多数现代应用程序的共同点是,它们需要对各种形式的数据进行编码或解码.无论是通过网络下载的 Json 数据,还是存储在本地的模型的某种形式的序列化表示形式,对于几乎无任何 Swift 代码库 ...
- java遇上html,JAVA遇见HTML——JSP篇:JSP内置对象(上)
JSP九大内置对象 JSP内置对象是Web容器创建的一组对象,不使用new关键就可以使用的内置对象. int[] value={60,70,80}; for(int i:value){ out.pri ...
- swift开发的小坑
####swift 几个比较好的UI库 swift UI库 ###1.tableView的代理方法 在swift中代理变得更加重要,当在继承代理的时候,代理的require方法必须实现,否则直接就报错 ...
- swift 引用其他类_浅谈swift中闭包修饰符 weak?unowned? 或什么都不用
浅谈swift中闭包修饰符 weak?unowned? 或什么都不用 平常的开发中,clourse是我们iOSr绕不过去的坎儿. 苹果本身也很重视闭包,像之前的一些老的target-action类型的 ...
- swift int转string_用Swift开发macOS程序,九、目录模块
程序中跟目录模块相似的,也是通过使用Outline View组件显示内容的模块有:备注.搜索.角色.符号.字典等其它五个.设计完成本模块后将不再对其它模块进行说明,一切请查看Github上代码.目录模 ...
- 遇见OFFER,阿里云最强技术团队现身招聘,“职”为你来
简历投递入口: https://bss.csdn.net/delivery/resume/ali 在5·15 遇见OFFER大厂梦招聘活动中,近20家企业来到CSDN[遇见OFFER]直播招聘栏目,其 ...
- 哈希分布与一致性哈希算法—在swift中看到这个有意思的算法
在研究swift的基本原理时,看到了这个算法,不怎么明白,找了几个帖子来学习.感谢@博客园一条辉的博客(liunx.cnblogs.com) @sparkliang 前言 在我们的日常web应用开发当 ...
- 谷歌为何要养苹果的亲儿子Swift?原来意在可微分编程
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 转自:机器之心 ,英文作者:Joaquín Thu ...
- 遇见OFFER|一汽-大众成都数字化研发中心,专场招聘来啦!
简历投递入口: https://marketing.csdn.net/questions/Q2006151516002288533 注:现在扫码入群,获得专属[内推码] 遇见OFFER专场直播招聘活动 ...
最新文章
- android时间utc,Android获取UTC时间的方式
- 【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )
- C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)
- 机械师怎么打开计算机管理,机械师创物者-R笔记本智能控制中心使用教程
- “leave the world behind”十一快乐出行
- Smart Form不弹出假脱机设置界面直接打印预览
- Scikit-Learn 机器学习笔记 -- SVM
- python获取原图GPS位置信息,轻松得到你的活动轨迹
- Python 安装 uWSGI并运行一个入门示例
- mysql 优化rand_mysql优化--巧用rand(),with rollup,help__update2014.1.13
- 大屏监控系统实战(11)-大屏显示日增投票数量柱状图的制作
- Nginx+Tomcat无法正确获取的域名和ip地址
- android开发 视图联动_Flutter混合APP开发
- 怎样使用计算机解方程,【教程】用计算器解方程(牛顿法)
- express 配置ip
- 高数 | 一点可导和邻域内可导能推出来什么?
- 端元提取——逐次投影算法SPA与顶点成分分析VCA
- php mysql scalar_symfony和doctrine及数据库操作 | 学步园
- 谷歌浏览器提示您的连接不是私密连接怎么办
- TesseractOCR(光学字符识别)引擎概述(一)
热门文章
- 浙大计算机基础知识2,[精选资料]14年浙大远程计算机基础2Windows知识题高起专 作业题2答案...
- 力扣——合并两个有序数组
- 固定定位(HTML、CSS)
- mysql sample函数_SAMPLE函数
- jpa oracle 传参int类型判空_SQL查询:Oracle、mysql、HQL查询语句差异
- pyaudio usb playback_电脑USB接口怎么禁用?系统禁用USB端口的两种方法
- cas导入Eclipse中
- 【李宏毅2020 ML/DL】补充:Ensemble: Bagging, Boosting, Adaboost, Gradient Boosting, Stacking
- 我爬了价值1800亿的商品信息
- 右下角使用css,CSS3 屏幕右下角的径向菜单