Reputation: 15107
How do I prevent my text from displaying Optional() in the Swift interpolation?
My text displaying is :
---You can only switch properties once all images from Optional("PPP") have finished uploading.---
Here is my code
let imagesLeftToUpload = syncer!.imagesToUpload?.count
if(imagesLeftToUpload != nil && imagesLeftToUpload! > 0) {
let propertyConfig = syncer!.getPropertyConfig()
var propertyNameStr: String = ""
if(propertyConfig != nil && propertyConfig!.propertyName != nil) {
propertyNameStr = "from \(propertyConfig!.propertyName)"
}
messageText.text = "You can only switch properties once all images\(String(describing: propertyNameStr)) have finished uploading."
}
Upvotes: 0
Views: 382
Reputation: 361
Swift is doing this because you provided an optional string, not a string. To solve it you need to unwrap the optional.
You can either use ! to unwrap an optional string, such as:
messageText.text = "You can only switch properties once all images\(propertyNameStr!) have finished uploading."
Or you can use a if statement to unwrap the optional.
if let nameString = propertyNameStr {
messageText.text = "You can only switch properties once all images\(nameString) have finished uploading."
}
Upvotes: 1
Reputation: 15107
I ended up going with the following because I didn't want to use guard, but I wanted to always display the message:
var propertyNameStr = ""
if let propertyName = syncer!.getPropertyConfig()?.propertyName {
propertyNameStr = "from \(propertyName) "
}
messageText.text = "You can only switch properties once all images \(propertyNameStr)have finished uploading."
Upvotes: 0
Reputation: 54706
Use optional binding to safely unwrap the optionals, then use String interpolation on the non-optional value.
guard let imagesLeftToUpload = syncer?.imagesToUpload?.count, imagesLeftToUpload > 0 else {return}
guard let propertyConfig = syncer?.getPropertyConfig(), let propertyName = propertyConfig.propertyName else {return}
messageText.text = "You can only switch properties once all images\(propertyName) have finished uploading."
Upvotes: 4