web-dev-qa-db-fra.com

La concaténation de chaînes Swift 3.0 laisse "Facultatif"

Depuis Swift 3.0, j'ai quelques problèmes avec Strings, en particulier avec la concaténation. Le premier exemple serait ce que j'ai utilisé depuis que j'ai commencé à utiliser Swift pour définir mes chaînes d'URL.

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

où Host est défini comme au début de la classe. Cela fonctionnait parfaitement jusqu'à Swift 3.0, maintenant que l'impression est la suivante:

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

ce qui est très étrange. Maintenant je dois écrire ceci 

let urlString = Host + "oauth/access_token"

Pour obtenir le résultat attendu.

https://Host.io/oauth/access_token

Un autre problème - je suppose que le même problème que je rencontre avec Strings est le suivant. Je concatène à nouveau des chaînes, mais cette fois-ci, j'utilise + ilke avec urlString - mais cette fois, cela ne fonctionne pas. La ligne de code ressemble à ceci:

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

qui produit malheureusement une chaîne comme celle-ci: "Mon nom est facultatif (26)". Dans ce cas, je n'ai pas de solution String(describing: ageComponents.year) n'est pas une option et cela ne me permet pas de faire des choses comme String(describing: ageComponents.year) ?? "whatever".

Quelqu'un a vu quelque chose de similaire?

8
jovanjovanovic

Dans Swift 3, toutes les propriétés de la structure native DateComponents sont des options, contrairement aux contreparties Foundation NSDateComponents.

var year: Int? { get set }

Vous devez le déballer. Si vous avez spécifié l'unité year dans ageComponents, vous pouvez le faire en toute sécurité.

2
vadian