Swift 3.0 字符串连接叶 "Optional"

Swift 3.0 String concatenation leaves "Optional"

从 Swift 3.0 开始,我在使用字符串时遇到了一些麻烦,尤其是在连接方面。第一个例子是我开始使用 Swift 来定义我的 url 字符串后使用的。

internal let host: String! = "https://host.io/"
let urlString = "\(host)oauth/access_token"

其中 host 定义为 class 开头。这在 Swift 3.0 之前一直有效,现在打印如下:

Optional("https://host.io/")oauth/access_token

这很奇怪。现在我必须写这个

let urlString = host + "oauth/access_token"

获得预期的输出。

https://host.io/oauth/access_token

另一个 - 我想我在使用字符串时遇到的类似问题就是这个。我再次连接字符串,但这次我使用 + 与 urlString 类似 - 但这次不起作用。代码行如下所示:

self.labelName.text = currentUser.name + " " + String(describing: ageComponents.year)

不幸的是,它会生成这样的字符串:"My Name Optional(26)"。在这种情况下,我没有解决方案 String(describing: ageComponents.year) 不是可选的,它不允许我做 String(describing: ageComponents.year) ?? "whatever"

之类的事情

有人见过类似的东西吗?

在 Swift 3 中,本机结构 DateComponents 的所有属性都是可选的,这与 Foundation NSDateComponents 对应的属性不同。

var year: Int? { get set }

您需要打开它。如果您在 ageComponents 中指定了单位 year,您可以安全地执行此操作。