//: 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. 掌握自定义协议的创建和遵循语法
Extensión de extensión Swift system learning 31
Supongo que te gusta
Origin blog.csdn.net/clarence20170301/article/details/59109027
Recomendado
Clasificación