Optionals using?

I'm using a MacBook Air with macOS10.14.5 and Xcode 10.2.1. When testing the code below, why won't the default "Unknown" appear in LblMessage when no text has been entered in TxtName and the button is pushed?

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var LblMessage: UILabel!
@IBOutlet weak var TxtName: UITextField!
@IBAction func pushButton( _ sender: Any ) {
let userName: String = TxtName.text ?? "Unknown"
LblMessage.text = "Hello " + userName

override func viewDidLoad() {
super .viewDidLoad()


There's a difference between nil (ie. no string), and "" (ie, the empty string).
You could either test for the empty string, or maybe even create a convenience on strings through an extension:

extension StringProtocol {
  var nonEmpty: Self? {
    return isEmpty ? nil : self

let name = textfield.text.nonEmpty ?? "Unknown"
label.text = "Hello " + name

(Not tested)

Got it. Should have known a Text Field contains an empty string by default. Fixed the problem with:

var txtName: String? = TxtName.text
if txtName == "" {
txtName = nil
let userName: String = txtName ?? "Unknown"