Swift 4:将 Bool 选项打印为未包装的 true 或 false 或包装的 nil?
Posted
技术标签:
【中文标题】Swift 4:将 Bool 选项打印为未包装的 true 或 false 或包装的 nil?【英文标题】:Swift 4: Printing out Bool optionals as either unwrapped true or false or as wrapped nil? 【发布时间】:2017-10-25 13:06:01 【问题描述】:基本上,我想将以下值打印为“true”、“false”或“nil”。如果我尝试只使用包装后的值,我会得到我想要的“nil”,但会获得不需要的“Optional(true)”或“Optional(false)”。如果我强制解开该值并且该值为 nil,则会出现致命错误。我尝试了下面的代码,因为我已经看到它适用于字符串,但是因为“nil”不是 Bool 类型,所以它不被接受。有什么解决方案吗?
var isReal: Bool?
String("Value is \(isReal ?? "nil")")
我正在导出到一个 csv 文件,知道这个值是真还是假或者还没有被检查是很有用的。
【问题讨论】:
【参考方案1】:如果您想要单线:
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"
这适用于所有可选类型。
【讨论】:
评论不用于扩展讨论;这个对话是moved to chat。【参考方案2】:只需做一个可选的绑定并做这个:
if let value = isReal
print(value) // will either be true or false
else
// isReal is nil
【讨论】:
我必须把我的字符串分开然后对吗?我有几个这样的值,我将它们附加到 for 循环中的字符串。有没有办法像部分展开一样做到这一点? 告诉我string
的样子,我会看看@ANoobSwiftly
csvFileString.append("\(key),\(item.url),\(item.dateAdded),\(item.isReal),\(item.lowestPrice),\(item.中值价格),\(item.volumeSold24Hr)\n")
我不知道当我在这里发布时屏幕上的某些格式发生了什么,但基本上是放置在字符串中的 7 个变量; 4 个是可选的... 2 个 Doubles,一个 Bool 和一个 Int。
@ANoobSwiftly 你可以在一个if
行中解开一堆变量:if let var1 = var1, let var2 = var2, let var3 = var3 /*... etc. */
【参考方案3】:
虽然我建议使用 Rashwan L's answer 中提到的可选绑定来实现它,但如果您出于某种原因打算将其声明为一个内衬字符串,您可以简单地这样做:
var isReal: Bool?
let myString = isReal != nil ? "Value is \(isReal!)" : "Value is nil"
【讨论】:
@LeoDabus 为什么你认为它会比我提到的更好?感谢您提前考虑。以上是关于Swift 4:将 Bool 选项打印为未包装的 true 或 false 或包装的 nil?的主要内容,如果未能解决你的问题,请参考以下文章
Swift:在 AFNetworking 调用中关闭的未包装选项