Extensión de extensión Swift system learning 31

//: Playground - noun: a place where people can play

import UIKit

// 适用场景一: 系统已有的类型无法满足特定的需求
extension Double {
    var km: Double { return self * 1_000.0 }
    var m:  Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1_000.0 }
}
var oneDouble: Double = 10.5.m
var twoDouble: Double = 120.45.km

extension Int {
    var square: Int { return self * self }
    var cube: Int { return self * self * self }
    func inRange(closedLeft: Int, closedRight: Int) -> Bool {
        return self >= closedLeft && self <= closedRight
    }
    func repeatitions(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
}
var imInt: Int = 5
imInt.cube
// imInt.repeatitions()

// 适用场景二:
//class CustomViewController: UIViewController {
//    
//}
//extension CustomViewController: UITableViewDataSource {
//    
//}
//extension CustomViewController: UITableViewDelegate {
//    
//}



Day07

回顾:
1. 类的声明和初始化
  public class ClassName {
     各种属性
     构造方法
     自定义方法
  }
2. 存储属性;  存储属性观察器
    var propertyName: String {
      willSet(customValue) {
       }
      didSet(customOldValue) {
       }
    }
3. 计算型属性: 通过复杂计算/通过其他的属性结合计算
    var propertyName: String {
      get {
          return xxxx
       }
      set(customNewValue) {
       }
    }
4. 类型属性: 作用类型(结构体/类)
      —> 属性的值是不依赖于实例化对象
    static var typePropertyName: Int = 0
    TypeName. typePropertyName
5. 延迟存储属性: 没有属性观察器语法
      —> 耗时 + 依赖于其他属性初始化的值 + 只计算一次
    lazy var propertyName: Int = {
        // 业务逻辑
        return xxxxx
    }()

今天内容:
	·	访问权限
	·	类型转换Type Casting
	·	 协议

访问权限Access Control: 可以设定代码在某个文件内/模块内可见或者不可见; 隐藏代码的实现细节, 使得部分属性/接口可访问
1. 针对对象: 类/结构体/枚举中的属性/自定义方法/构造方法
2. 某个文件内/模块Module内: 
    a. 模块和Xcode等价描述: Framework; Target/app/Bundle
    b. 文件内和Xcode等价描述: 以.swift结尾的文件

3. 常用的四种权限设置:
    public:      公开的; 可以被模块外访问(SDK开发)
    internal:    内部的; 默认设置的值; 可以被本模块内访问
    fileprivate: 文件内私有; 只可以被文件内访问
    private:     私有; 只可以在该类型内方法

4. 样例: 类的访问权限的实现
    [ 01_access_control ]
    —> 一般设置权限的原则: 权限从小到大
        a. 先把所有的类型都设置private(文件内可见)
        b. 再把哪些访问的属性/方法设置为internal, 或者public
    —> 查看01_access_control的包的内容:
        a. Contents.swift: 内容文件
        b. playground是一个工作空间
        
    —> Sources: swift文件
    —> Resources: 图片/配置文件......
         
    —> 在创建文件之后, 效果图
          a. Sources整个文件夹认为一个target
          b. Contents.swift认为另一个target
         

/05_Swift/Day07/Day07-AM1.zip

5. 类型查看和类型转换
 5.1. 类型查看运算符(Type Check Operator):  
  —> 描述: 查看某个实例常量/变量是否是那个类型; 是否是该类子类的实例对象; 
  -> 关键词: is
 5.2. 类型转换运算符(Type Casting Operator): 
  -> 描述: 对某个实例对象进行类型换(as?返回该类型的可选型; as!进行强制类型转换)
  -> 关键词: as! / as?

6.Any和AnyObject类型:
  6.1 AnyObject: 描述任意类类型(Class Type)的实例对象
  6.2 Any: 描述任意类型(类/结构体/枚举/函数类型)的实例对象

7. 样例(******): 类型查看和类型转换; Any / AnyObject
    [ 02_type_check_casting ]
    —> 总结:
       a. is是还是不是
       b. as! as? 是否可以转
       c. switch语句和as/is结合
       d. Any / AnyObject区分

/05_Swift/Day07/Day07-AM2.zip

————————— 下午内容 ———————
协议Protocol
1. 基本的协议的声明和使用
  1.1 对象: 枚举 / 结构体 / 类
  1.2 协议和OC一样, 也可以继承
  1.3 内容: 添加属性(只读/可读可写)和方法(init/自定义)
  1.4 样例: 枚举 / 结构体 / 类如何遵循自定义协议
       [ 03_basic_protocol ]
2. 适用场景
  2.1 样例: 实现下面流程图
       [ 04_other_protocol ]
       


/05_Swift/Day07/Day07-PM1.zip

扩展Extention
1. 描述: 对已存在的类型(枚举/结构体/类)添加属性和方法机制
2. 样例: 对系统已存在的结构体添加扩展, 对自定义的类添加扩展
    [ 05_extention ]

3. Swift解析JSON格式数据样例URL: 
http://api.openweathermap.org/data/2.5/weather?q=Barcelona,es&appid=ac02dc102cc17b974cd84206048d97d8
 3.1 原生NSURLSession类获取JSON步骤:
     a. NSURLSession单例对象(如果设置session, 和URLSessionConfiguration结合)
     b. 创建Request对象(给定URL)
     c. 创建task任务对象(dataTask/downloadTask/uploadTask)
     d. 执行task(发送请求)
     e. 处理服务器的返回(completionHandler; delegate方法)
  3.2 样例: 实现上面的步骤(没有使用MVC)
     [ 06_json_parse ]
     —> 总结:
       a. 服务器返回的三个类型的数据都是可选型
       b. JSON对象转Foundation对象是Any?(数组/字典)
       c. 从数组和字典取值也都是Any?

   3.3 课堂练习: 解析如下key的value
        a. 经纬度值: lon和lat
         
        b. “main”的Clear值
      

dataTask和downloadTask区别?
1. dataTask: 客户端请求, 服务器返回的数据以NSData类型返回(内存中)
2. downloadTask: 客户端请求, 服务器返回的数据直接存到沙盒内(磁盘中)



Day07知识点总结:
1. 掌握访问权限设定(public/internal/fileprivate/private)
2. 掌握类型判断和类型转换(is/as/as!/as?)
3. 掌握自定义协议的创建和遵循语法










Supongo que te gusta

Origin blog.csdn.net/clarence20170301/article/details/59109027
Recomendado
Clasificación