wake-up-neo.com

Swift 3.0 String-Verkettung lässt "Optional"

Seit Swift 3.0 habe ich einige Probleme mit Strings, insbesondere mit Verkettung. Das erste Beispiel wäre, was ich verwendet habe, seit ich Swift zum Definieren meiner URL-Strings verwendet habe.

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

wobei Host als am Beginn der Klasse definiert ist. Dies funktionierte bis Swift 3.0 einwandfrei. Jetzt werden folgende Ausdrucke ausgegeben:

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

das ist sehr seltsam. Jetzt muss ich das schreiben 

let urlString = Host + "oauth/access_token"

Die erwartete Ausgabe erhalten.

https://Host.io/oauth/access_token

Ein anderes Problem - ich denke, ein ähnliches Problem, das ich mit Strings habe, ist folgendes. Ich verkette wieder Strings, aber diesmal verwende ich + ilke mit urlString - aber diesmal funktioniert das nicht. Codezeile sieht so aus:

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

was leider zu einem String wie diesem führt: "My Name Optional (26)". In diesem Fall habe ich keine Lösung, String(describing: ageComponents.year) ist keine Option und erlaubt mir nicht, Dinge wie String(describing: ageComponents.year) ?? "whatever" zu tun.

Hat jemand etwas Ähnliches gesehen?

8
jovanjovanovic

In Swift 3 sind alle Eigenschaften der nativen Struktur DateComponents im Gegensatz zu den Gegenstücken der Foundation NSDateComponents optional.

var year: Int? { get set }

Sie müssen es auspacken. Wenn Sie die Einheit year in ageComponents angegeben haben, können Sie dies sicher tun.

2
vadian