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

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

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

 1 protocol Readable {
 2
 3       var programLang:String
 4
 5       var programeSourceUrl:String
 6
 7       var maxExecuteSecounds:Long
 8
 9 }
10
11 protocol Execuable {
12      func execute()
13 }
14
15
16
17 class BrowserScript  : Readable {
18
19           var progameLang:String = "js"
20           var programeSourceUrl:String = "http://xxxx.com/adfd.js"
21           var maxExecuteSecounds:Long=2023           init() {
24               println("browser script init")
25          }
26
27
28          execute
29
30 }
31
32 extenstion BrowserScript:Executable {
33      execute() {
34         JavaCoreScript.run(programeSourceUrl);
35      }
36 }
37
38
39 //test:
40
41 func executeTask<T:Executable>(executor:T) {
42     executor.execute();
43 }
44
45
46 executeTask(BrowserScript());  //不会报错
47
48
49  

通过协议再不修改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(1,2);

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

 

var sum2 = method1(1,num2:2);

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

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

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

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

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

调用 :

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

转载于:https://www.cnblogs.com/insights/p/6203050.html

swift 学习笔记[1]相关推荐

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

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

  2. swift学习笔记《5》- 实用

    title: swift学习笔记<5>- 实用 date: 2016-09-21 21:39:00 categories: 学习笔记 Swift学习 tags: Swift 1.setVa ...

  3. Swift学习笔记(4)使用UIImagePickerController实现从设备图片库和照相机获取图片

    Swift学习笔记(4)使用UIImagePickerController实现从设备图片库和照相机获取图片 设备图片库和照相机是图像的两个重要来源,使用UIKit中提供的图像选择器UIImagePic ...

  4. Swift学习笔记8--Optional Chaining

    Optional Chaining 自判断链接(Optional Chaining)是一种可以请求和调用属性.方法及子脚本的过程,它的自判断性体现于请求或调用的目标当前可能为空(  nil ).如果自 ...

  5. Swift学习笔记 ——(一)

    前言 作为一个前端开发者,经常与javaacript(以下简称:js)打交道.最近想了解一下ios开发,前两天看了一下objective-c(以下简称:oc),相对于js来说还是有很多不同的,但是语言 ...

  6. Swift学习笔记笔记(七) UIKit常用组件的使用

    一.实验目的: 1.掌握Cocoa程序的创建 2.掌握UILabel组件的使用 3.掌握UIButton组件的使用 4.掌握UITextField组件的使用 二.实验原理: 1.Cocoa应用程序框架 ...

  7. swift学习笔记_iOS开发(一)

    swift已经问世n久了,给自己充充电,学习一下苹果的新东西,苹果公司日渐推崇更为简洁明了更为直观快速的程序开发模式,从适配的AutoLayout到Swift语言,苹果一直在鼓励开发者去探索使用新技术 ...

  8. swift学习笔记之navigationController的设置以及使用

    在上一节中我们对navigationController进行了初始化,这里主要是对其进行基本的设置比如导航栏样式,导航栏文字样式以及对状态栏的基本调整,通过这些工作,这个navigationContr ...

  9. Swift学习笔记(5):集合类型

    目录: 数组:Array 集合:Set 字典:Dictionary Swift提供Array(有序集合数据).Set(无序无重复集合)和Dictionary(无序键值对集合)三种基本集合类型来存储明确 ...

  10. Swift学习笔记笔记(一)Swift编程步骤数据类型

    一.实验目的: 掌握Swift编程方法. 掌握Swift数据类型. 二.实验原理: playground的界面与使用方法. 常量与变量的定义方法. 3.常量与变量的类型声明方法. 三.实验步骤及内容: ...

最新文章

  1. 报名 | 首期AI Time PhD:听清北师兄分享前沿研究成果!
  2. NSIS安装制作基础教程
  3. 公众号怎么设置滑动文字_上善.小知——(1)公众号白名单怎么设置?
  4. qt如何做到实时显示数据_Python 如何实时绘制数据
  5. AUTOSAR从入门到精通100讲(三十二)-AutoSar之实时环境RTE
  6. 设计灵感|美容护肤主题,图文排版在Banner中的正确打开位置!
  7. office2016+visio2016
  8. 码农枪击了 4 名同事后被警方击毙!后附“程序员保命指南”
  9. android icloud照片恢复软件,iCloud照片怎么恢复到手机 iCloud照片恢复到手机方法【详细步骤】...
  10. 云数据库PostgreSQL新人怎样上手
  11. 1.两数之和(python)
  12. 昔日的手游大作,《无尽之剑》系列如今为何走向英雄末路?
  13. 滴滴Uber神州易到,共享出行四国军棋沙盘推演
  14. 当前服务器系统内核版本是多少,linux下如何查看系统和内核版本
  15. 聊聊开源类ChatGPT工作——MOSS
  16. eval——未结束的字符串常量
  17. 剖析Unreal Engine超真实人类的渲染技术Part 3 - 毛发渲染及其它
  18. 单体测试使用Assert.assertThat(expected,Matcher matcher)来对比结果和预期
  19. swagger使用流程梳理
  20. sgu290:Defend the Milky Way(三维凸包)

热门文章

  1. 傻瓜html编辑器中文版,LRC傻瓜编辑器官方版
  2. 几个app maker的网站
  3. 华为鸿蒙几时有新机,华为鸿蒙系统正小规模测试 新机年底前推出或备货百万台...
  4. 张飞电子-烟雾报警器DIY知识整理
  5. mysql从节点报错_CentOS7.9 下 MySQL 之 PXC 集群部署【Docker+多机多节点】
  6. Python Selenium 基础入门
  7. 关于线性插值的一点理解
  8. 使用OZMTool制作 ozmosis BIOS
  9. 【PR】一键删除所有间隙
  10. python的核心数据类型_UC头条:python的核心数据类型有哪些?