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("解析失败")  // 失败时执行
}
相关推荐
Thomas_YXQ几秒前
Unity3D Addressable 深度优化热更性能消耗
开发语言·3d·unity·微信
aini_lovee4 分钟前
C# 快递单打印系统(万能套打系统)
开发语言·c#
天启HTTP10 分钟前
开启全局代理后网络变慢,问题出在哪
开发语言·前端·网络·tcp/ip·php
丑过三八线13 分钟前
Runc 深度解析:从原理到实操
java·linux·开发语言·docker·容器·rpc
STDD16 分钟前
ntfy 自托管推送通知服务搭建:一条 curl 命令向手机发送通知
java·开发语言·智能手机
小林ixn17 分钟前
从拼多多手机号验证到模板引擎:深入正则表达式与 JS 字符串处理
开发语言·javascript·正则表达式
周末也要写八哥25 分钟前
线程的生命周期之线程睡眠
java·开发语言·jvm
右耳朵猫AI34 分钟前
Python周刊2026W22 | Django 6.1 Alpha 1发布、Nuitka 4.1发布、PEP 831终稿、PEP 808已接受
开发语言·python·django
半个烧饼不加肉36 分钟前
JS 底层探究-- 普通函数和构造函数
开发语言·javascript·原型模式