如果我有这段代码:
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);
谢谢。
最佳答案
let a : Int? = nil
let b : String? = "Apples"
let result = a.flatMap { a in b.map { b in
"We have \(a) of \(b)"
} }
结果是一个(常量)String?
。如果 a
或 b
中的任何一个为 nil
,则为 nil
,否则为具有展开值的字符串。
关于swift - 是否可以在 Swift 中编写一个失败的字符串编写器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47192998/