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("解析失败")  // 失败时执行
}
相关推荐
CoderIsArt5 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
AI情绪识别开源8 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
「QT(C++)开发工程师」9 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F9 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++
yaoxin5211239 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F9 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++
有点。9 小时前
C++二叉搜索树进阶
开发语言·c++
HugoStudio_SWAN9 小时前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生
sakiko_11 小时前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift