最近在IMOOK(网站)上自学了下swift , 总结下swift相对其他语言的不同之处 , 方便熟悉其他语言的程序员,熟悉swift语言的特性.

1. swift 的特别之处就是可以在原有的类上 , 使用 protocol (类似java接口) 获得泛型的作用 .

2. 通过extension可以扩展普通的class, struct, 也可以扩展protocol, 使用protocol类都拥有公共的扩展.

 protocol Readable { 

       var programLang:String

       var programeSourceUrl:String

       var maxExecuteSecounds:Long

 }

 protocol Execuable {
func execute()
} class BrowserScript : Readable { var progameLang:String = "js"
var programeSourceUrl:String = "http://xxxx.com/adfd.js"
var maxExecuteSecounds:Long=
init() {
println("browser script init")
} execute } extenstion BrowserScript:Executable {
execute() {
JavaCoreScript.run(programeSourceUrl);
}
} //test: func executeTask<T:Executable>(executor:T) {
executor.execute();
} executeTask(BrowserScript()); //不会报错

通过协议再不修改BrowserScript类定义文件的前提下, 为BrowserScript增加了execute的能力.
 extenstion 可以用在ios内置,各种库,自己编写的任意类,函数体,Enum,因为基本数据类型实际是结构体,所以也可以extension功能.

在swift官方的实现中大量使用extension实现功能,swift是面向协议扩展的语言.

3. swift的问号

swift 问号类似 var card:String? ,有问号表示这个变量可以为空(nil),实际也是Optional枚举类型,有值时候用Optional.Some()包装,使用时候需要解包,如果为nil实际为Optional.None().

解包的方法就是

 if let card = card {
println("your card is ",card);
}

4. Int,Long,String,Dictionary,Array 其实都是结构体,struct.

结构体和类的区别就是,结构体传值都是内存拷贝, 类引用一般都是引用.

5. weak 关键字.

weak 关键字表示弱引用, 就是拥有这个weak变量的对象不持有这个变量的引用.引用计数是内存回收的一种方法,为0时系统负责回收内存,如果对象A包含属性B强引用属性,直接a=nil, B 不会回收. 如果属性B设置为弱引用,本身设置属性b, b的引用计数不增长. weak用在此属性可以为空的情况.

6.unowned 关键字.

unowned 相当于weak,不过这个属性不能为空.属性被设置为空,程序崩溃直接退出.所以很少用.

7. 函数/方法.

7.1 方法定义:

func method1(_ x1:Int,_ x2 :Int) ->Int {

      //do something
}
var  sum = method1(,);

上面的参数中的下划线是外参数名 ,位置在形参x1前面 ,如果是下划线,表示调用时候不用写外参名称.如果是有名字,调用时候需要写外参数名,加入第二个参数的下划线替换成num2,调用时需要写成:

 

var sum2 = method1(,num2:);

最后的->表示之后跟着的是返回值 ,返回值可以是一个值,也可以是函数(方法).

方法可以直接写闭包(匿名函数) .

举例: 学生报名到学校, 返回流程处理函数, 具体就是执行了发送短信叫家长交学费. 返回的函数参数是家长的相关联系方式.

func add(student:Student,to school:School) ->(String)->{sendMsgToParentsFee($);}

上面的返回值是最后那个参数是String类型,具体执行是{}包含着的函数.里面的$0 表示参数中的第一个参数,多个参数依次累加表示.

调用 :

x.add(student:studentObj,to:schoolObj)

swift 学习笔记[1]的更多相关文章

  1. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  2. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  3. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  4. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  5. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  6. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  7. swift学习笔记1——基础部分

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. Swift学习笔记一

    最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...

  9. 记录:swift学习笔记1-2

    swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...

  10. Swift学习笔记(14)--方法

    1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方 ...

随机推荐

  1. Matrix4x4矩阵变换、欧拉角转四元数、角度转弧度

    Matrix4x4 // 重置矩阵 ][]) { m[][] = ; m[][] = ; m[][] = ; m[][] = ; m[][] = ; m[][] = ; m[][] = ; m[][] ...

  2. 【初码干货】在Window Server 2016中使用Web Deploy方式发布.NET Web应用的重新梳理

    在学习和工作的过程中,发现很多同事.朋友,在做.NET Web应用发布的时候,依然在走 生成-复制到服务器 这样的方式,稍微高级一点的,就是先发布到本地,再上传到服务器 这种方式不仅效率低下,而且不易 ...

  3. JS模块化开发:使用SeaJs高效构建页面

    一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...

  4. ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

  5. hibernate一对一主键单向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  6. 【MSP是什么】MSP认证之项目群管理学习总结

    首先要说的是,我这篇体会是针对一定的背景的,不能算是一种通用的管理方式,只能是我自己的经验总结,能给大家平常的管理提供一点思路,我就很满足了.先说说背景,我所在公司做的是大型桌面应用软件,简单点说就是 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(21)-权限管理系统-跑通整个系统

    系列目录 这一节我们来跑通整个系统,验证的流程,通过AOP切入方式,在访问方法之前,执行一个验证机制来判断是否有操作权限(如:增删改等) 原理:通过MVC自带筛选器,在筛选器分解路由的Action和c ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(60)-系统总结

    系列目录 前言: 起初写这个框架的时候,可以说在当时来说并不是很流行的设计模式,那是在2012年,面向对象的编程大家都很熟悉, 但是“注入.控制反转(DI,IOC,依赖注入).AOP切面编程”新兴名词 ...

  9. PHP的学习--在Atom中使用XDebug(Mac)

    之前写过一篇博客<PHP的学习--在sublime中使用XDebug(Ubuntu)>,讲了在Ubuntu系统 sublime 中配置 XDebug,其实配置好之后,我也很少用,原因有两点 ...

  10. JavaScript : 零基础打造自己的类库

    写作不易,转载请注明出处,谢谢. 文章类别:Javascript基础(面向初学者) 前言 在之前的章节中,我们已经不依赖jQuery,单纯地用JavaScript封装了很多方法,这个时候,你一定会想, ...