// 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 "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) id _ref;

- (instancetype)initWithRef:(id)ref;
- (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) id _ref;

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

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

@end

#endif
