XZ_Swift之Swift中的错误/异常处理、反序列化

Swift 2.0 推出的新的异常处理方法:使用 do-catch 机制获取和处理异常
try?
如果解析成功,就有值,如果转换失败,大多数会返回nil
try!
当开发者非常确定某个方法或者函数,在使用时候是绝对不会抛出任何异常的,这种情况下我们可以使用 try!
do-catch
最安全,但是也是最麻烦的
获取和处理异常,使用 catch 可以对异常的解析进行更为高级的处理
使用 throws 来声明异常,标明将会抛出异常,使用 throw 抛出异常

这里写图片描述

反序列化的时候经常会使用到

let jsonStr = "{\"name\":\"zhangsan\"}"
let data = jsonStr.data(using: .utf8)
// 反序列化 throw 抛出异常
// 方法一:推荐 try?:如果解析成功,就有值,如果转换失败,大多数会返回nil
let json = try? JSONSerialization.jsonObject(with: data!, options: [])
print(json ?? "没有值")

// 方法二:有风险,强烈不推荐 try!:如果解析成功,就有值,否则崩溃
let json1 = try! JSONSerialization.jsonObject(with: data!, options: [])

print(json1)

// 如果数据格式出现错误,变成下面的形式(name左侧的引号缺失),就会引起崩溃:
let jsonStr = "{name\":\"zhangsan\"}"

// 方法三:处理异常,能够接受到错误,并且输出错误
// 缺点:语法结构复杂
do {
    let json3 = try JSONSerialization.jsonObject(with: data!, options: [])
       print(json3)
   } catch {
       // 直接可以输出错误
       print(error)
    }
wxh@wxh-dt:~/tplink/PLATFORM$ git checkout vine3-maplePine-red error: 您对下列文件的本地修改将被检出操作覆盖: build/product_configs/en7529_EAP650GPv1/config.sdk.bk build/product_configs/en7529_EAP650GPv1/config.sdk.h smb_priv/kernel_modules/nm_flash/.nm_flash.ko.cmd smb_priv/kernel_modules/nm_flash/.nm_flash.o.cmd smb_priv/kernel_modules/nm_flash/modules.order toolchain/host_tools/mkimage toolchain/host_tools/squashfs4.2/squashfs-tools/mksquashfs toolchain/host_tools/squashfs4.2/squashfs-tools/unsquashfs toolchain/host_tools/xz-5.2.2/Makefile toolchain/host_tools/xz-5.2.2/config.log toolchain/host_tools/xz-5.2.2/config.status toolchain/host_tools/xz-5.2.2/debug/Makefile toolchain/host_tools/xz-5.2.2/lib/Makefile toolchain/host_tools/xz-5.2.2/libtool toolchain/host_tools/xz-5.2.2/po/Makefile toolchain/host_tools/xz-5.2.2/po/Makefile.in toolchain/host_tools/xz-5.2.2/src/Makefile toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-alone_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-alone_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-arm.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-armthumb.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-auto_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-block_buffer_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-block_buffer_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-block_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-block_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-block_header_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-block_header_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-block_util.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-check.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-common.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-crc32_fast.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-crc32_table.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-crc64_fast.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-crc64_table.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-delta_common.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-delta_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-delta_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-easy_buffer_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-easy_decoder_memusage.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-easy_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-easy_encoder_memusage.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-easy_preset.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-fastpos_table.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-filter_buffer_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-filter_buffer_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-filter_common.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-filter_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-filter_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-filter_flags_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-filter_flags_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-hardware_cputhreads.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-hardware_physmem.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-ia64.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-index.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-index_decoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-index_encoder.Plo toolchain/host_tools/xz-5.2.2/src/liblzma/.deps/liblzma_la-index_hash.Plo toolchai 正在终止
最新发布
11-27
<think> 首先,用户的问题是关于Git命令的错误信息。用户尝试了 `git checkout vine3-maplePine-red` 但遇到了错误错误信息显示本地修改的文件会被检出操作覆盖,因此操作终止。 关键点: - 错误类型:当尝试切换分支时,如果有未提交的更改,Git会阻止切换分支,因为这会覆盖本地修改。 - 解决方案:用户需要处理这些未提交的更改。常见方法包括: 1. 提交更改:使用 `git add` 和 `git commit` 保存更改。 2. 储藏更改:使用 `git stash` 临时保存更改,之后再应用。 3. 丢弃更改:使用 `git checkout -- <file>` 或 `git reset --hard` 丢弃更改(谨慎使用)。 在回答中,我应该: - 解释错误原因。 - 提供解决方法。 - 根据规则,回答后必须提出3-5个相关问题,以“§§相关问题§§”开头,然后列出1. 2. 3.等。 相关问题应基于用户的问题和我的回答,比如: - 如何正确地切换分支? - 什么是Git储藏? - 如何丢弃本地修改? - 如何查看当前分支的状态? - 如何避免这种错误? 确保回答用中文,因为用户指定了“请使用中文回答问题”。 结构化回答: 1. 解释错误:用户试图切换分支,但有未提交的更改,Git防止数据丢失。 2. 建议解决方案: - 提交更改:`git add .` 和 `git commit -m "message"` - 储藏更改:`git stash`,然后 `git checkout`,之后 `git stash pop` - 丢弃更改:`git checkout -- <file>` 或 `git reset --hard` 3. 结束回答后,添加“§§相关问题§§”并列出3-5个相关问题。 相关问题示例: 1. 如何查看当前分支的未提交更改? 2. Git储藏(stash)的具体用法是什么? 3. 如何永久丢弃本地修改而不提交? 4. 切换分支时如何避免覆盖本地更改? 5. 如果我有多个分支,如何管理未提交的工作? 最后,确保输出格式正确:一行“§§相关问题§§”,然后直接列出问题,用数字点号,不要换行分散。 </think>### 问题分析 您在尝试切换到分支 `vine3-maplePine-red` 时遇到了 Git 错误错误信息表明您对多个文件有本地修改(未提交或未储藏),而切换分支会覆盖这些修改。Git 为防止数据丢失,强制终止操作。常见原因包括: - 本地修改了代码但未提交(例如配置文件、编译生成文件等)。 - 未使用 `git stash` 临时保存工作状态。 ### 解决方案 1. **提交当前更改**(推荐): ```bash git add . # 添加所有修改到暂存区 git commit -m "保存本地修改" # 提交更改 git checkout vine3-maplePine-red # 切换分支 ``` 2. **储藏更改**(临时保存): ```bash git stash # 储藏所有修改 git checkout vine3-maplePine-red # 切换分支 git stash pop # 切换后恢复储藏内容 ``` 3. **丢弃本地修改**(谨慎使用): ```bash git reset --hard # 丢弃所有未提交修改 git checkout vine3-maplePine-red # 切换分支 ``` 4. **检查具体文件**: 使用 `git status` 查看哪些文件被修改,再针对性处理。 ### 注意事项 - 优先选择提交或储藏,避免数据丢失。 - 错误中列出的文件(如 `config.sdk.bk`, `mksquashfs`)多为编译生成文件,若无需保留可直接丢弃。 - 切换分支前确保工作区干净(`git status` 无未提交修改)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值