Swift带默认值的可选变量赋值(双重问号)

所以我试图做
let foo = dict["key"] as? String ?? "empty"
var bar = some_func(string: foo!)

和XCode 6抱怨“后缀的操作数’!应该有可选类型;类型是’String’“在第二行。

如果我将第一行更改为

let foo: String? = dict["key"] as? String ?? "empty"

错误消失。

这是一种缺点还是我只是做错了什么?

无聚结算符a? b是一个捷径
a != nil ? a! : b

它返回左操作数展开或右操作数。所以foo的类型是String,第二行应该是

var bar = some_func(string: foo)

没有感叹号,因为foo不是可选的,不能被解开。

(如果将第一行更改为

let foo: String? = dict["key"] as? String ?? "empty"

那么右边的结果再次被包装到可选字符串中,并且需要以在第二行中打开。它使错误消失,但这可能不是你想要的。)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...