如果我有这个密码:
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)"
} }
结果是(常数)
Optional
。如果String?
或nil
中的任何一个是a
,则为b
,否则为具有未包装值的字符串。