Objective-C Mapping for Local Interface

On this page:

Mapped Objective-C Protocol

A Slice local interface is mapped to an Objective-C protocol with the same name, for example:

Slice
["objc:prefix:ICE"]
module Ice
{
    local interface Communicator
    {
        ...
    }
}

is mapped to the Objective-C protocol ICECommunicator:

Objective-C
@protocol ICECommunicator <NSObject>
...
@end

The delegate metadata allows you to map a local interface with a single operation to an Objective-C block. For example:

Slice
["objc:prefix:ICE"]
module Ice
{
    ["delegate"] local interface ValueFactory
    {
        Value create(string type);
    }
}

is mapped to:

Objective-C
typedef ICEObject* (^ICEValueFactory)(NSString*);

LocalObject in Objective-C

All Slice local interfaces implicitly derive from LocalObject, which is mapped to ICELocalObject in Objective-C:

Objective-C
@interface ICELocalObject : NSObject
{
   // internal member
}
@end 

Mapping for Local Interface Inheritance in Objective-C

Inheritance of local Slice interfaces is mapped to protocol inheritance in Objective-C. For example:

Slice
module M
{
    local interface A {}
    local interface B extends A {}
    local interface C extends A {}
    local interface D extends B, C {} 
} 

is mapped to:

Objective-C
@protocol MA <NSObject>
@end

@protocol MB <MA>
@end

@protocol MC <MA>
@end

@protocol MD <MB, MC>
@end