Skip to content

Conditional update

Atomically sets the value to the given updated value if the current value equals the expected value.

- (void)compareAndSetWithCounterName:(NSString * _Nonnull)counterName expected:(NSInteger)expected updated:(NSInteger)updated responseHandler:^(NSInteger)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;
func compareAndSet(counterName: String, expected: Int, updated: Int, responseHandler: ((Int) -> Void)!, errorHandler: ((Fault) -> Void)!)

where:

Argument                Description
counterName name of the counter to compare.
expected the expected value of the counter. If the current value equals the expected value, the counter is set to the "updated" value.
updated the new value to assign to the counter if the current value equals the expected value.

Example

[Backendless.shared.counters compareAndSetWithCounterName:@"MyCounter" expected:1000 updated:2000 responseHandler:^(NSInteger value) {
    NSLog(@"Value has been updated: %li", value);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];

//

id<IAtomic> myCounter = [Backendless.shared.counters ofCounterName:@"MyCounter"];
[myCounter compareAndSetWithExpected:1000 updated:2000 responseHandler:^(NSInteger value) {
    NSLog(@"Value has been updated: %li", value);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
Backendless.shared.counters.compareAndSet(counterName: "MyCounter", expected: 1000, updated: 2000, responseHandler: { value in
    print("Value has been updated: \(value)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})

//

let myCounter = Backendless.shared.counters.of(counterName: "MyCounter")
myCounter.compareAndSet(expected: 1000, updated: 2000, responseHandler: { value in
    print("Value has been updated: \(value)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})