Avatar
↓みたいな初期化orアンラップのパターンをもっと簡単に書く方法ってないでしょうか? class Foo { private var bar: Bar? func baz(qux: Qux) { let bar: Bar // bar が nil なら初期化したい if let b = self.bar { bar = b } else { bar = Bar(qux: qux) self.bar = bar } // ここで bar を使う } }
5:01 PM
↓みたいなのがあれば func unwrap<T?>(_ value: inout T?, with initialize: () throws -> T) rethrows -> T { if let v = value { return v } let v = try initialize() value = v return v } ↓にできそう。 class Foo { private var bar: Bar? func baz(qux: Qux) { let bar: Bar = unwrap(&self.bar) { Bar(qux: qux) } // ここで bar を使う } }