- 项目介绍
- Swift基础
- Swift常用技巧
- 使用cocoapods管理我们的framework
项目介绍
- 首页
- 头像用户信息
- 详情、评价
- 收藏
目标
- Swift基本知识
- 如何运用Swift开发App
- 使用UITableView开发复杂的界面
- Autolayout使用技巧
- 高度自适应 单元格自适应 UITableView自适应
Swift 基础
- Swift与Foundation
- 值类型和引用类型
- 命名空间
- OC与Swift互相调用
- 异常处理
Swift与Foundation
自动识别
另一种写法
- 使用Foundation转换数组为字符串
综上 得出结论 Swift无缝兼容Foundation框架以及数据类型可以互相转换
- String -> NSString
- Int, Float, Double, Bool 以及其他与数字有关的类型 -> NSNumber
- Array -> NSArray
- Dictionary -> NSDictionary
- Set -> NSSet
- AnyObject -> NSObject
Swift原生类型是对Foundation更好的补充
值类型和引用类型
两个数组指向不同的地址,所以一个增加元素,另一个并没有增加。这是值引用
两个数组指向相同的地址,所以一个增加元素,另一个并没有增加。这是引用
值类型是复制的时候拷贝一份,在内存中开辟一块新的地址,而引用类型再复制的时候不拷贝,使用同一份内存地址
struct和enum定义的类型是值类型,使用class定义的为引用类型
基本数据类型全是struct
处理大型数据并且频繁增减元素的时候,NSMutabelArray,NSMutableDictionary,NSSet比较好一些,其他情况NSArray,NSDictionary,NSSet好一些
命名空间
Swift中C指针的使用
- int,bool,char -> CInt,CBool,CChar
- 内存需要自己管理
- 泛型
异常处理
import UIKit
enum Error:ErrorType{
case WrongJson
}
func text() throws {
do {
try NSJSONSerialization.JSONObjectWithData(NSData(), options: .AllowFragments)
}catch{
throw Error.WrongJson
}
}
do{
try text()
}catch Error.WrongJson{
// 异常处理
}```
####Swift常用技巧
- guard
- 属性观察
- Extentions
- 协议扩展
- map flatMap filter
- 单例
#####guard
func check(person:[String:String]){
// 检查身份证,如果没有,不准进考场
guard let id = person["id"] else{
print("没有身份证,不准进考场!")
return
}
// 检查准考证,如果没有,不准进考场
guard let examNumber = person["examNumber"] else{
print("没有准考证,不准进考场")
return
}
// 身份证和准考证都在可以进考场
print("您的身份证号为:(id),准考证号为(examNumber),请进入考场")
}
//check(["id":"123456"])
//check(["examNumber":"654321"])
check(["id":"123456","examNumber":"654321"])```
可以看出来,guard会逐一检查,从而提示。
- 可以把guard近似看成是Assert,但是你可以优雅的退出而不是崩溃。
- guard中解包的值可以用于后面的代码,而if是不行的,if只有在if的代码块中才能用到
属性观察
Extensions
import UIKit
extension Int {
// 可定义的函数
func times(closure:(() -> ())?){
if self >= 0 {
for _ in 0..