// Objective-C API for talking to ignore Go package.
//   gobind -lang=objc ignore
//
// File is generated by gobind. Do not edit.

#ifndef __Ignore_H__
#define __Ignore_H__

@import Foundation;
#include "ref.h"
#include "Universe.objc.h"


@class IgnoreS;
@protocol IgnoreI;
@class IgnoreI;

@protocol IgnoreI <NSObject>
// skipped method I.Argument with unsupported parameter or return types

// skipped method I.Result with unsupported parameter or return types

@end

@interface IgnoreS : NSObject <goSeqRefInterface, IgnoreI> {
}
@property(strong, readonly) _Nonnull id _ref;

- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (nonnull instancetype)init;
// skipped field S.F with unsupported type: interface{}

// skipped method S.Argument with unsupported parameter or return types

// skipped method S.Result with unsupported parameter or return types

@end

// skipped const Cuint with unsupported type: uint

// skipped const Cuint32 with unsupported type: uint32

// skipped const Cuint64 with unsupported type: uint64

// skipped const NamedConst with unsupported type: ignore.NamedString


@interface Ignore : NSObject
// skipped variable C128 with unsupported type: complex128

// skipped variable C64 with unsupported type: complex64

// skipped variable Uint with unsupported type: uint

// skipped variable Uint32 with unsupported type: uint32

// skipped variable Uint64 with unsupported type: uint64

// skipped variable V with unsupported type: interface{}

// skipped variable Var with unsupported type: interface{}

@end

// skipped function Argument with unsupported parameter or return types


// skipped function Result with unsupported parameter or return types


@class IgnoreI;

@interface IgnoreI : NSObject <goSeqRefInterface, IgnoreI> {
}
@property(strong, readonly) _Nonnull id _ref;

- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
// skipped method I.Argument with unsupported parameter or return types

// skipped method I.Result with unsupported parameter or return types

@end

#endif
