swift - 是否可以在 Swift 中编写一个失败的字符串编写器?

标签 swift string option-type

如果我有这段代码:

let a : Int? = 10;
let b : String? = "Apples";
let result = "We have \(a) of \(b)";
// result will be "We have Optional(10) of Optional(Apples)"

我可以通过添加默认值来删除可选项:

let result = "We have \(a ?? 0) of \(b ?? "")";
// result will be "We have 10 of Apples"

但是,如果我希望如果字符串中的任何可选项为 nil,那么字符串结果完全为 nil 怎么办?

let a : Int? = nil;
let b : String? = "Apples";
let result = "We have \(a) of \(b)";
// result will be nil

所以我可以这样写:

let a : Int? = nil;
let b : String? = "Apples";
if let result = "We have \(a) of \(b)" { self.process(result); }

编辑:

我实际上想要实现的是这样的:

func process (_ s: String?) {
    guard let s = s else { return; }
    print (s);
}

let a : Int? = nil;
let b : String? = "Apples";
let result = "We have \(a) of \(b)";
self.process (result);

谢谢。

最佳答案

您可以使用 map/flatMap 可选的方法:

let a : Int? = nil
let b : String? = "Apples"

let result = a.flatMap { a in b.map { b in
    "We have \(a) of \(b)"
} }

结果是一个(常量)String?。如果 ab 中的任何一个为 nil,则为 nil,否则为具有展开值的字符串。

关于swift - 是否可以在 Swift 中编写一个失败的字符串编写器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47192998/

相关文章:

ios - 带有两种不同颜色文本的 UILabel

python - 使用 Python 组合正则表达式中的两个列表

haskell - 如何使用 Maybe 的镜头设置功能?

ios - Swift Closure 中的可选链接,其中返回类型必须为 Void

java - 如何使用流和可选重写代码

ios - swift5关闭页面时如何传递参数?

swift - 如何在 Swift 中重置/重启 View Controller ?

ios - 使用 Parse 替换 Core Data

python - 如何在 Python 中执行包含 Python 代码的字符串?

java - 如何使用 Java 为列表中的每个字符串添加或插入 '(单引号),其中字符串以逗号分隔