タイトルのことを行いたいわけですが、やり方が何パターンかあります。

もっとも単純なものは

//パターン1
var str:String!
if str == nil{
    str = "newValue"
}

次に、オプショナルバインディングを用いた時

//パターン2
var str:String!
if let _ = str{
    //strがnilでないとき
}else{
    //strがnilのとき
    str = "newValue"
}

strがnilの時だけ値をいれたいので、else句以外は不要な上、冗長です。

次に、nil結合演算子を用いた時

//パターン3
var str:String!
str = str ?? "newValue"

この場合、とても簡潔に書けるのですが、strを二回書いてるところがなんだかダサいのです。

やはりパターン1がよいのでしょうか。
何か良い方法はありますか?