NULLも入る変数の宣言

/*
  NULLも入る変数の宣言
*/
var flag: Bool?
var num: Int?
if (flag == nil) {
    print("flag == NULL")
}
// if (flag) { // error: value of optional type 'Bool?' must be unwrapped to a value of type 'Bool'
if (flag ?? false) {
    print("flag == true")
} else {
    print("flag == false")
}
flag = true
if (flag ?? false) {
    print("flag == true")
} else {
    print("flag == false")
}
// print("num = \(num)") // warning: string interpolation produces a debug description for an optional value; did you mean to make this explicit?
print("num = \(num ?? 0)")