Swift 图书展示项目开发实战(一)

  • 项目介绍
  • Swift基础
  • Swift常用技巧
  • 使用cocoapods管理我们的framework
项目介绍
Swift 图书展示项目开发实战(一)_第1张图片
Paste_Image.png
  • 首页
Swift 图书展示项目开发实战(一)_第2张图片
Paste_Image.png
  • 头像用户信息
Swift 图书展示项目开发实战(一)_第3张图片
Paste_Image.png
  • 详情、评价
Swift 图书展示项目开发实战(一)_第4张图片
Paste_Image.png
Swift 图书展示项目开发实战(一)_第5张图片
Paste_Image.png
  • 收藏
Swift 图书展示项目开发实战(一)_第6张图片
Paste_Image.png

目标

  • Swift基本知识
  • 如何运用Swift开发App
  • 使用UITableView开发复杂的界面
  • Autolayout使用技巧
  • 高度自适应 单元格自适应 UITableView自适应

Swift 基础

  • Swift与Foundation
  • 值类型和引用类型
  • 命名空间
  • OC与Swift互相调用
  • 异常处理
Swift与Foundation
Swift 图书展示项目开发实战(一)_第7张图片
Paste_Image.png
Swift 图书展示项目开发实战(一)_第8张图片
Paste_Image.png

自动识别

另一种写法


Swift 图书展示项目开发实战(一)_第9张图片
Paste_Image.png
  • 使用Foundation转换数组为字符串
Paste_Image.png
Swift 图书展示项目开发实战(一)_第10张图片
Paste_Image.png
Swift 图书展示项目开发实战(一)_第11张图片
Paste_Image.png

综上 得出结论 Swift无缝兼容Foundation框架以及数据类型可以互相转换

  • String -> NSString
  • Int, Float, Double, Bool 以及其他与数字有关的类型 -> NSNumber
  • Array -> NSArray
  • Dictionary -> NSDictionary
  • Set -> NSSet
  • AnyObject -> NSObject
    Swift原生类型是对Foundation更好的补充

值类型和引用类型

Swift 图书展示项目开发实战(一)_第12张图片
Paste_Image.png

两个数组指向不同的地址,所以一个增加元素,另一个并没有增加。这是值引用

Swift 图书展示项目开发实战(一)_第13张图片
Paste_Image.png

两个数组指向相同的地址,所以一个增加元素,另一个并没有增加。这是引用

值类型是复制的时候拷贝一份,在内存中开辟一块新的地址,而引用类型再复制的时候不拷贝,使用同一份内存地址

struct和enum定义的类型是值类型,使用class定义的为引用类型
基本数据类型全是struct
处理大型数据并且频繁增减元素的时候,NSMutabelArray,NSMutableDictionary,NSSet比较好一些,其他情况NSArray,NSDictionary,NSSet好一些

命名空间

Swift 图书展示项目开发实战(一)_第14张图片
Paste_Image.png
Swift 图书展示项目开发实战(一)_第15张图片
Paste_Image.png

Swift中C指针的使用


Swift 图书展示项目开发实战(一)_第16张图片
Paste_Image.png
Swift 图书展示项目开发实战(一)_第17张图片
Paste_Image.png
  • int,bool,char -> CInt,CBool,CChar
  • 内存需要自己管理
  • 泛型
Swift 图书展示项目开发实战(一)_第18张图片
Paste_Image.png
Swift 图书展示项目开发实战(一)_第19张图片
Paste_Image.png
Swift 图书展示项目开发实战(一)_第20张图片
Paste_Image.png
Swift 图书展示项目开发实战(一)_第21张图片
Paste_Image.png

异常处理

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"])```

Swift 图书展示项目开发实战(一)_第22张图片
999E635C-D266-4C42-9661-789C439DF0E3.png

可以看出来,guard会逐一检查,从而提示。

  • 可以把guard近似看成是Assert,但是你可以优雅的退出而不是崩溃。
  • guard中解包的值可以用于后面的代码,而if是不行的,if只有在if的代码块中才能用到
属性观察
Swift 图书展示项目开发实战(一)_第23张图片
EA133332-088C-4BD0-BC0A-BBB04C07B5B0.png
Swift 图书展示项目开发实战(一)_第24张图片
1AA6AA82-9C10-4D0C-86BE-A50FDACDD386.png
Extensions
import UIKit

extension Int {
    // 可定义的函数
    func times(closure:(() -> ())?){
        if self >= 0 {
            for _ in 0..

你可能感兴趣的:(Swift 图书展示项目开发实战(一))