Avatar
norio_nomura 7/2/2020 1:58 AM
_modifyではなくsetで書かれていたとしても、setの場合はdefaultValueが不要だから、一度しか呼ばれないですね。 @swift-5.3.3 extension Dictionary { public subscript(key: Key, default2 defaultValue: @autoclosure () -> Value) -> Value { get { print("get") return self[key] ?? defaultValue() } set { print("set") self[key] = newValue } } public subscript(key: Key, orInsert value: @autoclosure () -> Value) -> Value { mutating get { { $0 }(&self[key, default2: value()]) } } } var d: [String: Int] = [:] print(d["a", orInsert: {() -> Int in print("closure"); return 1}()]) print(d)