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("解析失败")  // 失败时执行
}
相关推荐
Wenweno0o20 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
chenjingming66621 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
cch891821 小时前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳21 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发21 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense21 小时前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎21 小时前
STL 栈 队列
开发语言·c++
勿忘,瞬间21 小时前
数据结构—顺序表
java·开发语言
张張40821 小时前
(域格)环境搭建和编译
c语言·开发语言·python·ai
weixin_4235339921 小时前
【Windows11离线安装anaconda、python、vscode】
开发语言·vscode·python