Swift 3.0字符串连接离开"可选"

jov*_*vic 8 string string-concatenation swift3 ios10 xcode8

从Swift 3.0开始,我对字符串有一些麻烦,尤其是连接.第一个例子是我开始使用Swift来定义我的url字符串时使用的.

internal let host: String! = "https://host.io/"
let urlString = "\(host)oauth/access_token"
Run Code Online (Sandbox Code Playgroud)

其中host被定义为类的开头.这完美地工作直到Swift 3.0,现在打印出来像这样:

Optional("https://host.io/")oauth/access_token
Run Code Online (Sandbox Code Playgroud)

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

let urlString = host + "oauth/access_token"
Run Code Online (Sandbox Code Playgroud)

获得预期的输出.

https://host.io/oauth/access_token
Run Code Online (Sandbox Code Playgroud)

另一个 - 我想我和Strings有类似的问题就是这个.我再次连接字符串,但这次我使用+ilke和urlString - 但这次不起作用.代码行如下所示:

self.labelName.text = currentUser.name + " " + String(describing: ageComponents.year)
Run Code Online (Sandbox Code Playgroud)

不幸的是,它产生了这样的字符串:"我的名字可选(26)".在这种情况下,我没有一个解决方案String(describing: ageComponents.year)是不可选的,它不允许我做的事情String(describing: ageComponents.year) ?? "whatever"

有人见过类似的东西?

vad*_*ian 2

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

var year: Int? { get set }
Run Code Online (Sandbox Code Playgroud)

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