Avatar
norio_nomura 7/2/2020 1:12 AM
value()が2回実行されそうな気もしたけど、inoutになった時点で_modify {…}が呼び出されるから、そうはならないのね。 @swift-5.3.3 extension Dictionary { public subscript(key: Key, orInsert value: @autoclosure () -> Value) -> Value { mutating get { // We have to "mutate" the result of subscript[_:default:] in order // to ensure an entry gets added, so we pass it inout to a function. return { $0 }(&self[key, default: value()]) } } } var d: [String: Int] = [:] print(d["a", orInsert: {() -> Int in print("closure"); return 1}()]) print(d)