Swift 安全地解包可选字符串和整数

2024-01-16

当我准备为第二个视图触发我的 segue 时,我还会发送一些如下值:

if let aTime = ads[indexPath.row]["unix_t"].int {
    toView.time = aTime
}

if let aTitle = ads[indexPath.row]["title"].string {
    toView.title = aTitle
}

在第二个 VC 中,我声明了如下变量:

var time: Int?
var title: String?

这就是我解开这些值的方式:

if time != nil {
   timeLabel.text = String(time!)
}

if title != nil {
   titleLabel.text = title!
}

这一切都有效,我从来没有收到任何由未包装的变量或零值引起的错误。但有没有更简单的方法呢?

现在感觉我检查太多了


我可以想到三种选择。

  1. if/let。与您当前的选项非常相似,但您不必隐式解开。

    if let time = time {
        timeLabel.text = "\(time)"
    }
    
    if let title = title {
        titleLabel.text = title
    }
    

    您甚至可以在同一条线上展开它们。这样做的缺点是,如果其中之一是nil,那么两个标签都不会被设置。

    if let time = time, let title = title {
        timeLabel.text = "\(time)"
        titleLabel.text = title
    }
    
  2. guard/let。如果它们在类似的函数中setupViews(),然后你可以像这样一行解开:

    func setupViews() {
        guard let time = time, let title = title else { return }
        timeLabel.text = "\(time)"
        titleLabel.text = title
    }
    
  3. 您可以使用默认值和??操作员快速打开包装。

    timeLabel.text = "\(time ?? 0)"
    titleLabel.text = title ?? ""
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 安全地解包可选字符串和整数 的相关文章

随机推荐

  • 解析 JSON C# 错误

    我尝试获取 JSON 数据但出现错误 解析值时遇到意外字符 路径 行 0 位置 0 我正在使用 Net 4 5 和 JSON Net 框架 这是我的代码 WebClient net new WebClient string str awai
  • UIView 和 UITableView,reloadData 奇怪的延迟

    我的视图控制器的重画有些奇怪 视图控制器包含一个 UITableView 和一个微调器 我有一个更新提要函数 由 IBOutlet 触发 带来了spinner在我的视图控制器前面并放置一个doUpdate将函数放入 NSOperationQ
  • IE10 中的 jquery UI Draggable 通过滚动条拖动时出现 bug

    我有一个带有可拖动元素的 div 它在所有浏览器中都工作得很好 除了 IE10 存在一个问题 如果您尝试通过滚动条拖动该元素 它会滚动 直到您松开鼠标 在这种情况下该元素将捕捉到鼠标的当前位置 我已经设置了这个小提琴 http jsfidd
  • 如何在 PHP 中创建新运算符?

    我看到自己在执行以下代码来默认分配 PHP 上的所有类型 variable variable variable default value 我知道 5 3 我可以做到 variable variable default value 我想通过
  • 如何替换python3中的has_key?

    我尝试安装自动自我控制 https github com andreasgrill auto selfcontrol并在执行此命令时卡住 sudo usr bin python auto selfcontrol py 它显示错误 Attri
  • 如何将 Spring Boot 配置元数据文件转换为 HTML

    我确信一定有一种优雅的转身方式Spring Boot配置元数据文件 https docs spring io spring boot docs current reference html configuration metadata ht
  • 编译成功后找不到exe

    使用opencv在microsoft Visual Studio 2008中成功调试人脸检测代码后 找不到可执行文件 没有错误 只有三个警告 但它表明构建已成功 您可以进入项目设置并检查输出文件夹 在那里查找二进制文件 二进制不一定意味着e
  • 重命名 gtsummary、tbl_regression/tbl_stack 中的行

    我正在使用 gtsummary 并使用 tbl regression 和 tbl stack 函数将 11 个不同模型的输出堆叠在一起 我希望了解一个一致自变量的优势比在不同感兴趣的因变量之间如何变化 当我打印 tbl stack 输出时
  • 如何解码令牌并获取 Django 的 djangorestframework-jwt 包的信息

    我已经开始使用 djangorestframework jwt 包而不是 PyJWT 我只是不知道如何解码传入的令牌 我知道有验证令牌方法 我需要知道的是如何解码令牌并返回信息编码 我使用此方法来解码令牌并验证用户 首先我没有使用algor
  • 以编程方式为 DataGrid 创建 WPF DataGridTemplateColumn

    我希望能够根据我的数据源以编程方式创建 DataGridTemplateColumns 例如 如果我的源在特定列中有一个日期 我希望能够利用 Datepicker 控件 我知道这可以在设计时使用 xaml 和 DataGridTemplat
  • 运行 rake 任务时如何跳过 Rails 初始值设定项的加载?

    我的 Rails 应用程序有一个网站爬虫 它加载爬虫在 Rails 初始化程序中使用的身份验证凭据config initializers 初始化程序通过调用 SiteLogin 模型中的模型方法来加载身份验证 当我跑步时rake db mi
  • 如何确保 Twitter Bootstrap 3 中的列均匀换行?

    如果我有未知数量的要显示的项目 每个项目都在自己的列中 有没有办法让它们均匀换行 而不必为每个项目创建新行 I have div class row div class col md 3 col sm 4 col xs 6 h1 Title
  • 位置始终返回“未知”

    我刚刚在真实设备上尝试了我的第一个 WP7 应用程序 我的问题是我使用地理定位来实现其中一项功能 但我总是得到位置未知 我不知道是否有任何方法可以向我的应用程序授予位置权限 或者我是否遗漏了某些内容 在手机设置中 定位服务已启用 地图应用程
  • 将云端端点模型类序列化到Android文件系统的方法

    我已经成功创建了一个云端点模型 可以轻松地从 App Engine 检索信息 为了减少往返次数并提供更快的用户体验 我确定了一个希望存储到本地存储的实例 在我的应用程序的其余部分中 我使用 ObjectInputStream 来读取和写入对
  • 使用 Visual Studio Code 对齐多行编辑光标

    使用 Visual Studio Code 的多行编辑功能 如果空白尚不存在 是否可以轻松对齐行尾列中的所有光标 类似于 Notepad 的功能 由此 To this 迈克 摩尔 Mike Moore 有这个扩展 https marketp
  • 如何为 Summernote 的插入图像对话框设置图像扩展名

    我在用夏日笔记 https summernote org 一切正常 但有一件事我不明白 以下是我在 SummerNote 中使用的设置 summerNoteElement summernote toolbar magic style h1
  • 如何解压一个文件夹的所有子文件夹中的所有rar压缩包,然后删除这些压缩包?

    我想解压主文件夹中某些子文件夹中的所有文件 解压后删除 xxx rar 文件并将包含文件的文件夹移动到另一个位置 Main Folder 子文件夹1 带有 rar 文件 子文件夹2 带有 rar 文件 子文件夹3 带有 rar 文件 这是我
  • ASP.NET Core Web API:捕获路由错误

    我正在尝试捕获 ASP NET Core Web API 项目中的路由错误 具体来说 路由错误是指 在控制器中我只有 GET api values 5 HttpGet id public string Get int id return v
  • 如何删除 ChromeDriver 中的滚动条,如何更改 http-agent?

    I use IWebDriver driver new ChromeDriver options in C 当我采取 GetScreenshot 经常看到滚动条 有办法去掉吗 第二个问题 如何模拟 更改http agent在 Chrome
  • Swift 安全地解包可选字符串和整数

    当我准备为第二个视图触发我的 segue 时 我还会发送一些如下值 if let aTime ads indexPath row unix t int toView time aTime if let aTitle ads indexPat