the-swift-programming-language 学习笔记
常量和变量
常量是定义是不可以修改的,在类中定义的常量,可以在构造函数中赋值。let修饰
变量是可以修改的。var修饰
字符串中字符的遍历
for code in string {}
for codeunit in string.unicodeScalars {}
控制语句
break 跳出循环体
continue 终止当前,进入下一个循环
label 配置break和continue使用;用label标记循环体,break label跳出标记的循环体,continue label 是进入下一个标记的循环
fallthrogh:switch语句中使用,用在case节点方法后面,作用是贯穿下一个case
switch语句中必须包含 default节点,case节点不需要使用break
范围使用
number1…number2 == number1<=var<=number2
number1..<number2 == number1<=var<number2
元组
var tuples = (int,string,obj,…)
字典
Dictionary<KyeT,ValueT>
for (key,value) in Dictionary {}
for key in Dictionary.keys
for value in Dictionary.values
在字典复制时,取决于字典的value是值类型还是引用类型
函数
func Function(params) -> params { 方法体 }
函数的参数默认是let 常量,需要变量需要在定义参数是,定义var
参数定义时,可以赋值默认值 func Test(paramens:String = "default value") {}
可变参数 func sum(numbers:Double…) 类似传递一个Array<T> 的参数
参数传递引用 inout 关键字
返回多值(返回一个元组类型的值)
函数本身可以作为参数传递,也可以作为范围值
参数的内部名称和外部名称
函数类型
嵌套函数
定义在其他函数体中的函数
闭包
类似lambdas表达式
全局函数是一个有名字,但不会捕获任何值得闭包
嵌套函数是一个有名字并且可以捕获其封闭函数域内值得闭包
闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量的没有名字的闭包
表达式:
{ (parameters) -> returntype in
statements
}
var numbers =[1,3,30,16,25,73,97]
func backwards(s1:String, s2:String) -> { return s1>s2 }
作为函数参数传递
sort(numbers,backwars)
闭包表达式传递
sort(numbers,{
(s1:String, s2:String) -> bool in
Return s1>s2
})
对于短的闭包可写作一行
Sort(numbers,{(s1:String, s2:String) -> bool in return s1>s2})
闭包能自动推断参数类型
sort(numbers,{s1, s2 in return s1>s2})
单行表达式可以省略return 关键字
sort(numbers,{s1,s2 in s1>s2})
参数名简写
sort(numbers,$0>$1)
运算符函数
sort(numbers,>)
尾随闭包:把闭包作为最后一个参数传递给函数,就可以使用尾随闭包
sort(numbers){
(s1:String, s2:String) -> bool in
Return s1>s2
})
Sort(numbers){$0>$1}
结构和类
在swift中只有类似引用类型,其他都是值类型
- 共同:
定义属性
定义方法
定义下标
定义构造器
扩展方法(external)
遵循协议(protocol)
- 不同:
类允许继承
类型转换允许在运行时检查和解释一个类型实例的类型
析构允许一个类实例释放任何其被分配的资源
引用计数允许对一个类的多次引用
属性
可以通过闭包和函数来设置属性默认值
存储属性
存储在特定类或结构的实例里的一个常量(let 定义)或变量(var 定义)
常量和存储属性
定义一个常量的结构体属性,该结构体的所有属性也就变成了常量,对已引用类型的class则不一样,把一个class的实例赋给一个常量后,仍然可以修改实例的变量属性
延迟存储属性
用@lazy 来表示一个延时存储属性,延时存储属性必须用 var声明;当属性的值依赖在实例的构造过程前无法知道具体值的外部因素,或者当属性的值需要复杂大量的计算是,可以只在需要的时候来计算
计算属性
计算属性不直接存储值,而是提供一个getter来获取值,一个setter来间接设置其他属性或者变量的值。在setter中默认使用newValue表示接收的值
只读计算属性
就是只有getter的计算属性
属性监听器
willSet 在设置新的值之前调用。默认使用newValue表示新值
didSet 在新的值被设置之后立即调用。默认使用oldValue表示旧值
全局变量和局部变量
计算属性和属性监听器所属的模式也可以用于全局变量和局部变量,全局变量是在函数、方法、闭包或任何类型之外定义的变量,局部变量是在函数、方法或闭包内部定义的变量
全局的常量或变量都是延迟计算的,跟延迟计算属性相似,不同的地方在于,全局的变量或者常量不需要标记@lazy特性;局部范围的常量或者变量不会延迟计算。
类型属性
类型属性用于定义特定类型所有实例共享的数据
对于值型类(枚举和结构)可以定义存储和计算型类型属性,对于class则只能定义计算型类型属性
在枚举和机构中用static 声明一个类型属性
在class中用class声明一个类型属性
方法
值类型的属性不能在他的实力方法中被修改,如果确定需要修改某个具体值类型的属性,可以选择变异方法(用 mutating 声明的方法),然后方法就可以从方法内部修改它的属性
类型方法
于类型属性相同
附属脚本 subscript
语法:
subscript(parameter:parametertype) -> returntype {
get{
}
set(newValue){
}
}
构造器
在类和结构中定义变量或常量属性必须必须在构造器中赋值,或者在定义时赋值
在构造器中可以修改常量属性
可选属性类型
用type? 声明,默认值是nil
自动引用计数(ARC)
Swift使用ARC来跟踪管理应用使用的内存。大部分情况下,意味着在swift中,内存管理仍然工作,不需要自己考虑内存管理的事情,当实例不再被使用是,ARC会自动释放类实例所占的内存
解决类实例见的强引用环
弱引用 (使用weak声明若引用)
无主引用 (使用unowned 声明无主引用)
无主引用以及隐式展开的可选属性 (隐式展开的可选属性 type!)
闭包产生的强环形引用:将一个闭包赋值给类实例的某个属性,并且这个闭包使用了实例。这个闭包可能访问实例的某个属性,例如self.someProperty,或者调用某个方法,例如:self.someMethod()。
解决闭包闭包产生的强环形引用,定义占有列表(用 [unowed/weak self] 声明)
@lazy var property : (parametertype) -> returntype = {
[unowned self] (parameter: parametertype) -> returntype in
}
当闭包和占有的实例总是相互引用并且同时销毁时,闭包占有定义为unowned。相反,当占有引用有时可能会说nil时,将闭包内的占有定义为weak。弱引用总是可选类型。
两个属性值都是可选类型都可能是nil时,使用弱引用
两个属性中只有一个是可选类型,并且可能nil时,使用无主引用
两个属性都必须有值就使用无主引用和隐式展开可选属性。
强制拆包
声明可选类型的强制拆包:var s = String? var t = s!
扩展
extension SomeType = {}
协议
protocol SomeProtocol {}
突变方法
能在方法或函数内部修改实例类型的方法称为突变方法。mutating
原文地址:https://developer.apple.com/library/ios/documentation/swift/conceptual/swift_programming_language/index.html
译文地址:http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/
the-swift-programming-language 学习笔记的更多相关文章
- The C++ Programming Language 学习笔记 第7章 函数
1.关于内联函数(inline) 借用一下书中的例子. inline int fac(int n) { ) ? :n*fac(n-); } inline描述符给编译器一个提示,要求 ...
- The C++ Programming Language 学习笔记 第6章 表达式和语句
1.关于strcpy函数. 书中说c风格的字符串尽量少用,strcpy这样的函数应该也要少用.这里讲这个函数主要是要通过本章课后练习第十题来讲一下前面提及的要点.巩固一下前几章的知识.写了一段,本来感 ...
- The C++ Programming Language 学习笔记 第5章 指针、数组和结构
1.关于输出指向字符的指针的值. 现在定义,char c='a',char* pc=&c.在C中,输出该值只需要printf("%p\n",pc);而在C++中,如果cou ...
- The C++ Programming Language 学习笔记 第四章 类型和声明
1.关于main 函数中的 return 0 C99标准中,main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统).如果 main 函数的最后没有写 return ...
- 《The Swift Programming Language》的笔记-第24页
The Swift Programming Language读书笔记学习笔记 第24页 本页主要内容有两个:打印输出和怎样在swift凝视代码 1 怎样打印变量和常量的值? 使用println函数,细 ...
- The Swift Programming Language 英文原版官方文档下载
The Swift Programming Language 英文原版官方文档下载 今天Apple公司发布了新的编程语言Swift(雨燕)将逐步代替Objective-C语言,大家肯定想学习这个语言, ...
- The Swift Programming Language 中文翻译版(个人翻新随时跟新)
The Swift Programming Language --lkvt 本人在2014年6月3日(北京时间)凌晨起来通过网络观看2014年WWDC 苹果公司的发布会有iOS8以及OS X 10.1 ...
- [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01
注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...
- iOS Swift-元组tuples(The Swift Programming Language)
iOS Swift-元组tuples(The Swift Programming Language) 什么是元组? 元组(tuples)是把多个值组合成一个复合值,元组内的值可以使任意类型,并不要求是 ...
- iOS Swift-控制流(The Swift Programming Language)
iOS Swift-控制流(The Swift Programming Language) for-in 在Swift中for循环我们可以省略传统oc笨拙的条件和循环变量的括号,但是语句体的大括号使我 ...
随机推荐
- flask 基础ssti注入
源代码地址 (请用python2.7运行,python3有点出入) 注入点: 不是返回的静态模板而是反回模板字符串变得让客户端可以控制. XSS 这里直接 http://39.105.116.195: ...
- 洛谷P1071潜伏者(提高组)
题目描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于S国的R 国间谍小C终于摸清了 S 国军用密码的编码规则: 1. S国军方内部欲发送的原信息经过加密后在网 ...
- Opencv3.1.0安装包
这个资源是Opencv3.1.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载
- 第八篇:python基础_8 面向对象与网络编程
本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了 ...
- Spark on Yarn——spark1.5.1集群配置
写在前面: spark只是一种计算框架,如果要搭建集群要依托与一定的组织模式. 目前来说,Spark集群的组织形式有三种: 1. Standalone:使用akka作为网络IO组件,mast ...
- vue实现多个元素或多个组件之间动画效果
多个元素的过渡 <style> .v-enter,.v-leave-to{ opacity: 0; } .v-enter-acitve,.v-leave-active{ opacity: ...
- JavaScript的团队编程规范
本规范是针对javascript函数式编程风格与公司严重依赖于jQuery进行编码的现实制定出来. 禁止使用eval,with与caller(ecma262 v5 的use strict要求).eva ...
- Linux命令之type,whatis,whereis,which,locate,find
第一个:type--查询一个命令的类型 -查询一个命令为内部或者外部命令的命令: -linux的众多命令中,有内部命令和外部命令,这时可以用type命令来查询一个命令到底是属于内部命令还是属于外部命令 ...
- BZOJ 1492 [NOI2007] - cash
Description 最初你有 S 块钱, 有 N 天给你来兑换货币, 求最大获利. 一共只有两种货币 A , B . 对于每一天, 给定 3 个系数 A[i], B[i], Rate[i] A[i ...
- 云服务器基本环境配置(php5.6+mysql+nginx)
1.安装nginx sudo apt-get install nginx nginx 基本配置 server{ listen ; server_name www.xxxxxx.cn; root /va ...