当前位置: 首页 > 知识库问答 >
问题:

Swift 4:将Bool选项打印成未包装的true或false或包装的nil?

蔡辰钊
2023-03-14

基本上,我想将以下值打印为“真”,“假”或“无”。如果我尝试只使用包装值,我会得到我想要的“nil”,但会得到不需要的“Optional(true)”或“Optional(false)”。如果我强制解开该值的包装并且该值为n,则会出现致命错误。我尝试了下面的代码,因为我已经看到它适用于字符串,但由于“nil”不是Bool类型,因此不被接受。对此有什么解决方案吗?

var isReal: Bool?
String("Value is \(isReal ?? "nil")")

我要导出到一个csv文件,知道这个值是真还是假或者还没有被检查是很有用的。

共有3个答案

阎元徽
2023-03-14

虽然我建议使用可选绑定来实现它,就像Rashwan L的回答中提到的那样,但是如果你的目标是——出于某种原因——将它声明为一个行字符串,你可以简单地这样做:

var isReal: Bool?
let myString = isReal != nil ? "Value is \(isReal!)" : "Value is nil"
宰父俊彦
2023-03-14

只需做一个可选的绑定并执行以下操作:

if let value = isReal {
   print(value) // will either be true or false
} else {
   // isReal is nil
}
张逸清
2023-03-14

如果你想要一句俏皮话:

var isReal: Bool?
let s = "Value is \(isReal.map { String($0) } ?? "nil")"
print(s) // "Value is nil"

或使用自定义扩展:

extension Optional {
    var descriptionOrNil: String {
        return self.map { "\($0)" } ?? "nil"
    }
}

你能做到的

var isReal: Bool?
let s = "Value is \(isReal.descriptionOrNil)"
print(s) // "Value is nil"

这适用于所有可选类型。

 类似资料:
  • 在windows下安装一个软件很轻松,只要双击.exe的文件,安装提示连续“下一步”即可,然而linux系统下安装一个软件似乎并不那么轻松了,因为我们不是在图形界面下。所以你要学会如何在linux下安装一个软件。 在前面的内容中多次提到的yum,这个yum是Redhat所特有的安装RPM程序包的工具,使用起来相当方便。因为使用RPM安装某一个程序包有可能会因为该程序包依赖另一个程序包而无法安装。而

  • 我是Maven的新手,我有一个基于Java的web项目,在我的MyEclipse中配置了Maven。 现在,如果我修改了任何Java文件,那么我需要执行还是?

  • 打印页面包含RichTextBlock。这个RichTextBlock过去包含文本,可以使用以下代码打印。如果页面包含列表框或网格视图,我需要如何打印的帮助。是否可以使用RichTextBlock包含列表框并检测溢出以继续打印?如果您能提供示例、参考或教程,将不胜感激。谢谢 ---更新此列表框将包含以下数据: ItemName ItemCode价格数量。。 ------ ------ ----更新

  • 问题内容: 我一直在研究各种休眠教程和示例,因为它们具有身份/主键属性,有些使用Java基本类型,有些使用包装器类型。 与 为什么以及何时将实体密钥用作另一个? 问题答案: 从Hibernate的角度来看,它没有任何改变,因为Hibernate使用相同的Hibernate类型来表示它们。 然而,正如字节码忍者指出,你不能区分原始INT的默认值从分配的同时也有可能没有歧义(一个ID总是意味着一个新的

  • 问题内容: 我一直在研究各种hibernate教程和示例,因为它们具有标识/主键属性,有些使用Java基本类型,有些使用包装器类型。 与 为什么以及何时将一个用作实体密钥? 问题答案: 从Hibernate的角度来看,它没有任何改变,因为Hibernate使用相同的Hibernate类型来表示它们。 然而,正如字节码忍者指出,你不能区分原始INT的默认值从分配的同时也有可能没有歧义(一个ID总是意

  • RPM(Red Hat Package Manager) 系统中存在着一个关于RPM的数据库,它记录了安装包以及包与包之间的依赖关系。 RPM包是预先在Linux机器上编译并打包的文件,安装非常快捷;但它也有一些缺点: 安装环境必须与编译时的环境一致或者相当; 包与包之间存在着相互依赖的情况下,卸载某个包时,需要先把系统里所有依赖该包的包进行卸载;虽然也可忽略依赖关系进行强制删除,但这样就会导致异