swift中try \ try? \ try! 区别

try? 将可能抛出的错误转换为可选值(Optional):

如果操作成功:返回包装在 Optional 中的结果

如果操作失败(抛出错误):返回 nil

传统的错误处理(do-try-catch):

Swift 复制代码
do {
    let result = try someThrowingFunction()
    print("成功: \(result)")
} catch {
    print("失败: \(error)")
}

使用 try?

Swift 复制代码
let result = try? someThrowingFunction()
if let result = result {
    print("成功: \(result)")
} else {
    print("失败")
}

示例1:JSON 解析

Swift 复制代码
struct User: Codable {
    let name: String
    let age: Int
}

let jsonString = """
{"name": "张三", "age": 25}
"""

// 传统方式
do {
    let data = jsonString.data(using: .utf8)!
    let user = try JSONDecoder().decode(User.self, from: data)
    print("用户: \(user.name)")
} catch {
    print("解析失败: \(error)")
}

// 使用 try?
if let data = jsonString.data(using: .utf8),
   let user = try? JSONDecoder().decode(User.self, from: data) {
    print("用户: \(user.name)")  // 成功时执行
} else {
    print("解析失败")  // 失败时执行
}
相关推荐
IvanCodes6 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
aramae8 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
2501_9159184110 小时前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
qq_25183645710 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理11 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
+VX:Fegn089512 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
阿里嘎多学长12 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
weixin_3077791314 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab
2601_9669496514 小时前
为什么量化回测中 for 循环比 DataFrame 慢三个数量级?从向量化原理讲起
开发语言·python·pandas·股票数据·quantdash