when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>(
  1. TResult $default(), {
  2. required TResult spKeys(),
  3. required TResult spGetValue(
    1. String data
    ),
  4. required TResult setNewStringValue(
    1. String key,
    2. String newValue
    ),
  5. required TResult setNewBoolValue(
    1. String key,
    2. bool newValue
    ),
  6. required TResult setNewIntValue(
    1. String key,
    2. int newValue
    ),
  7. required TResult setNewDoubleValue(
    1. String key,
    2. double newValue
    ),
  8. required TResult removeSPKey(
    1. String key
    ),
  9. required TResult removeAllKey(),
})

A switch-like method, using callbacks.

As opposed to map, this offers destructuring. It is equivalent to doing:

switch (sealedClass) {
  case Subclass(:final field):
    return ...;
  case Subclass2(:final field2):
    return ...;
}

Implementation

@optionalTypeArgs
TResult when<TResult extends Object?>(
  TResult Function() $default, {
  required TResult Function() spKeys,
  required TResult Function(String data) spGetValue,
  required TResult Function(String key, String newValue) setNewStringValue,
  required TResult Function(String key, bool newValue) setNewBoolValue,
  required TResult Function(String key, int newValue) setNewIntValue,
  required TResult Function(String key, double newValue) setNewDoubleValue,
  required TResult Function(String key) removeSPKey,
  required TResult Function() removeAllKey,
}) {
  final _that = this;
  switch (_that) {
    case SwiftActionDefault():
      return $default();
    case SwiftSpKeysAction():
      return spKeys();
    case SwiftSpGetValueAction():
      return spGetValue(_that.data);
    case SwiftSetNewStringValueAction():
      return setNewStringValue(_that.key, _that.newValue);
    case SwiftSetNewBoolValueAction():
      return setNewBoolValue(_that.key, _that.newValue);
    case SwiftSetNewIntValueAction():
      return setNewIntValue(_that.key, _that.newValue);
    case SwiftSetNewDoubleValueAction():
      return setNewDoubleValue(_that.key, _that.newValue);
    case SwiftRemoveSpKeyAction():
      return removeSPKey(_that.key);
    case SwiftRemoveSpAllKeysAction():
      return removeAllKey();
  }
}