九、其他话题

  1. 错误处理

    enum VendingMachineError: Error {
    case invalidSelection
    case insufficientFunds(coinsNeed: Int)
    case outOfStock
    } struct Item {
    var price: Int
    var count: Int
    } class VendingMachine {
    var inventory = [
    "Candy Bar": Item.init(price:12, count: 7),
    "Chips": Item.init(price: 20, count: 0),
    "Bread": Item.init(price:15, count:5)
    ] var coinsDecposited = 0 func vend(itemName: String) throws { defer {
    print("推出清理")
    }
    print("开始售卖") guard let item = inventory[itemName] else {
    throw VendingMachineError.invalidSelection
    } guard item.count > 0 else {
    throw VendingMachineError.outOfStock
    } guard coinsDecposited >= item.price else {
    throw VendingMachineError.insufficientFunds(coinsNeed: item.price)
    } coinsDecposited -= item.price
    var newItem = item
    newItem.count -= 1
    inventory[itemName] = newItem
    print("售卖成功") }
    } var machine = VendingMachine()
    machine.coinsDecposited = 5 do {
    try machine.vend(itemName: "Chips")
    } catch VendingMachineError.invalidSelection {
    print("没有当前商品")
    } catch VendingMachineError.insufficientFunds(let coinsNeeded) {
    print("你需要投\(coinsNeeded)币")
    } catch VendingMachineError.outOfStock {
    print("已售空")
    } catch {
    print("未知错误")
    } // throw 抛出异常 do-catch处理异常 defer
  2. 权限控制

    // open  public internal  fileprivate  private
    /*
    1.类成员的访问级别不能高于类的访问级别;
    2.常量、变量、属性、下标脚本访问级别低于其所声明的类型级别,并且如果不是默认访问级别(internal)要明确声明访问级别。
    3.在不违反1、2的情况下,setter的访问级别可以抵御getter的访问级别。
    4.必要构造方法(required修饰)的访问级别必须和类访问级别相同,狗狗剃的默认逐一构造函数的访问级别不高于其成员的访问级别,其他方法的访问级别遵循规则1
    */
  3. 不透明类型

  4. 自动引用计数

    // 循环引用
    // 弱引用weak(对生命周期中引用会变为nil的实例,只能声明变量类型) 无主引用unowned(对初始化赋值之后引用再也不会赋值为nil的实例,无主引用默认始终有值,只能定义为非可选类型) // 闭包的循环引用
    lazy var someColisure = {
    [unowned self, weak delegate = self.delegate](index: Int, stringToProgress: String) -> String in
    // code
    }
  5. 内存安全

十、常见三方库

Alamofire  SwiftJSON  R.Swift  MonkeyKing  Kingfisher  SnnapKit  Dollar

十一、加餐

1.可选链、

2.KVC
· 继承自NSObject的类,标记@objc的属性可以使用setValue:(_ forKey:)
· 非继承自NSObject的类和结构体,使用索引+参数值
struct ValueType {
var name: String
} var object = ValueType.init(name: "Objective-c") // set
object[keyPath: \ValueType.name] = "swift"
// get
let valueOfName = object[keyPath: \ValueType.name]
print(valueOfName) 3.KVO
// 只有NSObject才能支持KVO,且要观察的属性必须使用@objc dynamic修饰
// 方法一
class Person: NSObject {
@objc dynamic var age = 0
} class ViewController: UIViewController { let p = Person() override func viewDidLoad() {
super.viewDidLoad() p.addObserver(self, forKeyPath: "age", options: [.new, .old], context: nil) p.age = 33
// Do any additional setup after loading the view.
} override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "age" {
print(change as Any)
}
} } // 方法二
class Person: NSObject {
@objc dynamic var age = 0
} class ViewController: UIViewController { @objc dynamic let p = Person() var ob: NSKeyValueObservation? override func viewDidLoad() {
super.viewDidLoad() self.ob = observe(\.p.age, options: [.new, .old], changeHandler: { (_ , change) in
print(change as Any)
}) p.age = 33
// Do any additional setup after loading the view.
} }

【学习】重学Swift5-错误处理、三方库等的更多相关文章

  1. Python学习--23 内建模块及第三方库

    本文将介绍python里常用的模块.如未特殊说明,所有示例均以python3.4为例: $ python -V Python 3.4.3 网络请求 urllib urllib提供了一系列用于操作URL ...

  2. 从0开始学爬虫9之requests库的学习之环境搭建

    从0开始学爬虫9之requests库的学习之环境搭建 Requests库的环境搭建 环境:python2.7.9版本 参考文档:http://2.python-requests.org/zh_CN/l ...

  3. iOS:iOS开发非常全的三方库、插件等等

    iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...

  4. 重学C++ (1)

    写在开头的话:这学期没有写太多的代码,终于把中英文两篇论文弄完了,趁着中间的空隙,想想找工作的处境.自己也定了自己的方向.不管学什么语言吧,每个语言都有自己的优势和使用的群体.只要自己是良马,终会有伯 ...

  5. three.js是JavaScript编写的WebGL第 三方库

    three.js是JavaScript编写的WebGL第 三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机.光影.材质 ...

  6. 推翻自己和过往,重学自定义View

    http://blog.csdn.net/lfdfhl/article/details/51671038 深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 A ...

  7. 重学 Java 设计模式:实战抽象工厂模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  8. 重学 Java 设计模式:实战单例模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 5个创建型模式的最后一个 在设计模式中按照不同的处理方式共包含三大类:创建型模式.结 ...

  9. 重学 Java 设计模式:实战享元模式「基于Redis秒杀,提供活动与库存信息查询场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 程序员‍‍的上下文是什么? 很多时候一大部分编程开发的人员都只是关注于功能的实现,只 ...

  10. 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击

随机推荐

  1. Blazor学习之旅 (13) Razor类库的使用

    在上一篇我们学习了Blazor和JavaScript的互操作性,这一篇我们了解下如何创建和使用Razor类库. 什么是Razor类库? 我们都知道,在.NET应用程序中,我们可以通过NuGet来安装各 ...

  2. iis6导出Excel报错检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,8000401a错误解决办法

    1:在服务器上安装office的Excel软件. 2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 3:依次双 ...

  3. 手把手教你在 Sevalla 上部署 Next.js 博客:从搭建到上线全流程

    很多开发者会纠结:"现在博客平台这么多,为啥还要自己搭博客?" 答案很简单:用 Next.js 搭的博客,是真正属于你的 "数字资产". 为什么选 Next.j ...

  4. 使用war包安装jenkins

    war包下的jenkins是没有自己的配置文件 安装java jenkins必须依赖的 curl -O https://dshvv-1300009960.cos.ap-beijing.myqcloud ...

  5. mac快速安装git

    前提 每次安装git,都需要安装xcode,我不需要xcode 而且这厮还极其的大,下载慢. 找到一个办法[如果你不需要 Xcode,只安装 Xcode Command Line Tools 就可以了 ...

  6. qt 显示中文

    参考链接 CSDN Tips 直接使用第三种方法 也可以使用 QString::fromLocal8Bit("打开文档文件") 这种方式

  7. 统计的系统客观性与动态进化性•Freq频率与Bayes两大学派及争论•统计推断•Bayes学派及其基本观点与Bayes估计

    统计的系统客观性: 统计数据及其活动不是片面的,而是系统客观反映客观现象. 周期的做"总体统计" + 随机/按需/周期做"抽样统计": 统计的动态进化性: 统计 ...

  8. webdriver.Chrome New API

    The webdriver.Chrome APIs are simplified in the latest version of Selenium, and both find_element_by ...

  9. win11专业版多桌面如何快速切换的问题

    有雨林木风系统的小伙伴使用win11专业版系统时,发现可以创建多个桌面来一起来工作办公,而且每个桌面都是独立的,使用起来很是方便,但是也有很多小伙伴不知道如何快速切换多个桌面,那么win11系统多个桌 ...

  10. Win11专业版系统无限重启的问题

    很多电脑基地的用户在使用电脑的经常会遇到一些问题,这不有用户升级了Windows11系统之后发现,电脑会出现不停重启的问题.这要怎么解决呢?下面,技术员小编就带着大家一起来看看详细的解决方法吧! Wi ...