常量和变量

常量是定义是不可以修改的,在类中定义的常量,可以在构造函数中赋值。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 学习笔记的更多相关文章

  1. The C++ Programming Language 学习笔记 第7章 函数

    1.关于内联函数(inline)      借用一下书中的例子. inline int fac(int n) { ) ? :n*fac(n-); }      inline描述符给编译器一个提示,要求 ...

  2. The C++ Programming Language 学习笔记 第6章 表达式和语句

    1.关于strcpy函数. 书中说c风格的字符串尽量少用,strcpy这样的函数应该也要少用.这里讲这个函数主要是要通过本章课后练习第十题来讲一下前面提及的要点.巩固一下前几章的知识.写了一段,本来感 ...

  3. The C++ Programming Language 学习笔记 第5章 指针、数组和结构

    1.关于输出指向字符的指针的值. 现在定义,char c='a',char* pc=&c.在C中,输出该值只需要printf("%p\n",pc);而在C++中,如果cou ...

  4. The C++ Programming Language 学习笔记 第四章 类型和声明

    1.关于main 函数中的 return 0 C99标准中,main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统).如果 main 函数的最后没有写 return ...

  5. 《The Swift Programming Language》的笔记-第24页

    The Swift Programming Language读书笔记学习笔记 第24页 本页主要内容有两个:打印输出和怎样在swift凝视代码 1 怎样打印变量和常量的值? 使用println函数,细 ...

  6. The Swift Programming Language 英文原版官方文档下载

    The Swift Programming Language 英文原版官方文档下载 今天Apple公司发布了新的编程语言Swift(雨燕)将逐步代替Objective-C语言,大家肯定想学习这个语言, ...

  7. The Swift Programming Language 中文翻译版(个人翻新随时跟新)

    The Swift Programming Language --lkvt 本人在2014年6月3日(北京时间)凌晨起来通过网络观看2014年WWDC 苹果公司的发布会有iOS8以及OS X 10.1 ...

  8. [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01

    注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...

  9. iOS Swift-元组tuples(The Swift Programming Language)

    iOS Swift-元组tuples(The Swift Programming Language) 什么是元组? 元组(tuples)是把多个值组合成一个复合值,元组内的值可以使任意类型,并不要求是 ...

  10. iOS Swift-控制流(The Swift Programming Language)

    iOS Swift-控制流(The Swift Programming Language) for-in 在Swift中for循环我们可以省略传统oc笨拙的条件和循环变量的括号,但是语句体的大括号使我 ...

随机推荐

  1. Python 3基础教程12-常见的错误

    本文来介绍几种常见的错误,任何人在刚开始接触一个新的语言,即使照着代码抄写,也可能会犯错误,这里我们就介绍几种常见的错误,看看你是否遇到过. 1. NameError: name 'xxx' is n ...

  2. Android之SQLite总结

    SQLite 是一个轻量级的数据库,常用于各种嵌入式设备当中.android 提供了SQLiteOpenHelper的抽象类用于帮助开发数据库.在实际使用中经常定义一个类继承SQLiteOpenHel ...

  3. Android 启动项 Activity

    使用SDK创建一个App的时候,基本都会看到这段代码: <activity android:name=".ExampleActivity" android:icon=&quo ...

  4. 集训队日常训练20181124 DIV2

    急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路  时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte总提交: 15            ...

  5. Java系列学习说明

    最近要回顾以前的开发知识了,每天一个案例,争取早日成为一名合格的程序猿,现在就是猴娃子级别的.

  6. abp ef codefirst 设置默认值

    public partial class tableIsWaringfiled : DbMigration { public override void Up() { //设置默认值为true Add ...

  7. 【bzoj3325】[Scoi2013]密码 逆模拟Manacher

    题目描述 给出一个只包含小写字母的字符串的长度.以每一个字符为中心的最长回文串长度.以及以每两个相邻字符的间隙为中心的最长回文串长度,求满足条件的字典序最小的字符串. 输入 输入由三行组成.第一行仅含 ...

  8. 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图

    原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...

  9. [codeforces] 449C Jzzhu and Apples

    原题 质因数分解后贪心即可(最后贪2) #include<cstdio> #include<vector> #include<stack> #include< ...

  10. Visual Studio中的/MD, /MT, /MDd, /MTd 选项

    Visual Studio中/MD, /MT, /MDd, /MTd表示多线程模块是否为dll.对于这几个选项我的理解如下: /MD: 定义了_MT和_DLL,让程序用多线程和dll版本的运行库. / ...