swift 学习笔记[1]
最近在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]的更多相关文章
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记4——扩展、协议
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记2——函数、闭包
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记1——基础部分
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Swift学习笔记一
最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...
- 记录:swift学习笔记1-2
swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...
- Swift学习笔记(14)--方法
1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方 ...
随机推荐
- PHP相关代码
1 <html> <head> <meta http-equiv="content-type" content="text/h ...
- vue2.0构建淘票票webapp
项目描述 之前一直用vue1.x写项目,最近为了过渡到vue2.0,特易用vue2.0栈仿写了淘票票页面,而且加入了express作为后台服务. 前端技术栈:vue2.0 + vue-router + ...
- Quality 是什么?
Quality 是什么? 通常,我们谈及 Quality(质量)时,最常见的问题就是:Quality 是什么? 有很多业界先驱和研究人员已经回答了这个问题,我在这里并不会再给出一个新的答案.在学习总结 ...
- 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE
C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...
- (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)
一. HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...
- [译]ZOOKEEPER RECIPES-Locks
锁 全局式分布式锁要求任何时刻没有两个客户端会获得同一个锁对象,这可以通过使用ZooKeeper实现.像优先级队列一样,首先需要定义一个锁节点. 在ZooKepeer的发布中src/recipes/l ...
- JS入门
1,undefined,NaN,Null,infinity 1) undefined 是undefined 类型 var a; //声明变量后不赋值 typeof 类型判断方法 console.log ...
- 判断用户是否是第一次打开该app
package com.example.fujilun_2; import android.app.Activity; import android.content.Intent; import an ...
- iOS--碎片知识锦集
知识锦集day01 1.UIView的两个方法: sizeThatFits和 sizeToFit 官方文档上说: - (CGSize)sizeThatFits:(CGSize)size; // ...
- .net中 页面包含子页面 类似include的功能--(记录九)
aspx页面中: //加上这一段代码 <%@ Register Tagprefix="ImgEvaTask" TagName="content1" src ...