code: def _generate_union_tag_vars_funcs(self, union):
          
          for field in union.all_fields:
              if not is_void_type(field.data_type):
                  enum_field_name = fmt_enum_name(field.name, union)
  
                  with self.block_func(
                          func=fmt_camel(field.name),
                          args=[],
                          return_type=fmt_type(field.data_type)):
  
                      with self.block(
                              'if (![self is{}])'.format(
                                  fmt_camel_upper(field.name)),
                              delim=('{', '}')):
                          error_msg = 'Invalid tag: required {}, but was %@.'.format(
                              enum_field_name)
                          throw_exc = (
                              '[NSException raise:@"IllegalStateException" '
                              'format:@"{}", [self tagName]];')
                          self.emit(throw_exc.format(error_msg))
                      self.emit('return _{};'.format(fmt_var(field.name)))
                  self.emit()
docs: Emits the getter methods for retrieving tag-specific state. Setters throw
          an error in the event an associated tag state variable is accessed without
          the correct tag state.