总结一些 Swift3.0学习笔记
Any AnyObject NSObject
Int
Double
String
struct
都是结构体
s
Any
: 一个协议声明AnyObject
: 一个具体的协议,协议里面没有内容,默认情况下,所有的类,都遵循了这个协议NSObject
:NSObject
类
条件判断
swift中没有非零即真和零为假的说法,只有严格的Bool(true/false)
1. if的使用
|
|
2. 三目运算符
|
|
3. guard
guard
条件成立,继续往下走,不成立执行else
里面的语句else
后要跳出语句,配合return
,continue
,break
,throw
等使用
|
|
4. switch的用法
1. switch与基本数据
|
|
2. switch与区间
|
|
3. switch与枚举
|
|
4. switch与元组
|
|
循环
1. for循环
|
|
2. while循环
1. while循环
|
|
2. repeat~while循环
|
|
字符串处理
|
|
数组
|
|
字典
|
|
元组
|
|
可选类型
##1. 非可选类型 (使用的时候必须有值)
|
|
2. 可选类型 (才能赋值为nil)
Swift中的nil
!= OC中的nil
,Swift种的nil
就是一个特殊含义的字符,表示没有值
|
|
3. 四种方式使用可选类型的值
1. 判断 + 直接解包
|
|
2. 可选绑定
|
|
3. guard守护
|
|
4. 空合运算符
|
|
类型转换
|
|
函数
1. 函数的四种类型
1. 无参数,无返回值
|
|
2. 无参数,有返回值
|
|
3. 有参数,无返回值
|
|
4. 有参数,有返回值
|
|
函数其他注意
1. 省略第一个外部参数的名字
|
|
2. 设置参数默认值
|
|
3. 设置可变参数
|
|
4. 修改内部参数的值
|
|
5. 设置参数为地址传递
|
|
6. 函数嵌套
|
|
7. 函数的类型
|
|
8. 区分不同函数
|
|
枚举
|
|
结构体
1. 结构体基本使用
|
|
2. 结构体扩充构造函数
|
|
类
1. 类的声明初始化
|
|
2. 类的属性和方法
|
|
3. 类的继承之KVC使用
|
|
4. 类的循环引用
|
|
5. 结构体和类的区别
- 结构体有逐一构造器,类没有
- 结构体是值类型,类是引用类型
- 结构体不能继承(意味着没有多态)
6. OC中使用Swift的类和结构体
- OC与Swift混编,Swift中的函数名要符合OC的规范,重载的方法用
@objc
指定名字,避免冲突 - 如果是类,必须要继承自
NSObject
,而且用public
关键字对类、方法、属性等进行修饰 - 如果是协议最好继承自
NSObjectProtocol
(也就对应OC中的基协议),用标识符@objc
,而且声明为public
Build Settings
搜索-Swift
,找到Objective-C Generated Interface Header Name
里面的.h文件即为OC调用时,要包含的头文件#import "XXX-Swift.h"
|
|
7. Swift中调用OC
- Swift项目创建OC文件时回生成.h桥接文件,可以在
Build Settings
的Objective-C Bridging Header
中找到,也可以自己创建.h文件,路径跟系统生成的一致 - 在.h文件包含对应的OC头文件
三大特性
类的三大特性:封装、继承、多态
|
|
解决办法:
|
|
可选链
|
|
协议
1.协议的基本使用
|
|
2. 协议中使用代理
weak
修饰类,work : class
,轻量级work : NSObjectProtocol
也可以,但是遵循work
协议的类,都要继承要NSObject
了
|
|
3. 协议中的可选
协议中的可选,仅仅是OC的特性,Swift是不支持的
解决方案:就是让Swift协议,拥有OC特性
|
|
#泛型
|
|
闭包
闭包 == 特殊的函数
1.闭包的基本使用
|
|
2. 尾随闭包和逃逸闭包
|
|
3. 闭包的循环引用(4中解决方式)
|
|
懒加载
只是在第一次访问的时候,会调用相应的函数,获取实例,下次即使值为nil
,也不会再次调用相应的函数,获取新的实例
|
|
注释
|
|
访问权限
- Swift中的访问控制模型基于模块和源文件、类这三个概念
- Swift访问权限,作用于类,属性,方法等
- Swift中的访问级别遵循一个基本原则:不可以在某个实体中定义访问级别更高的实体(类如果都不能访问,里面的属性方法就算开放了也不能访问)
访问修饰符
internal
: 在本模块中都可以访问,(默认),子类也可以继承private
: 当前类私有fileprivate
: 在当前源文件中可以访问public
: 跨模块时,如果修饰类,则无法继承。修饰方法,不能被override
open
: 跨模块时,如果修饰类,可以继承。修饰方法,可以被override
方法抛出异常
|
|
Playground
1. Playground异步执行
|
|
2. MarkDown语法
从Xcode右边文件属性,选中Render Documentation看渲染效果
|
|
3. TimeLine使用
点击右上角双环(Show the Assistant editor),在代码中做的动画可以在TimeLine中预览
4. Playground的Sources目录
- 放到Sources目录下的源文件会被编译成模块(module)并自动导入到Playground中,只会编译一次
- 使用注意:需要使用
public
关键字修饰资源文建中,需要暴露给外界的内容