0

だから、私のJavaコードからobjective-cの2つのクラスを一致させる方法を見つけようとしています。

Java コードは次のとおりです。

import java.io.Serializable;

public interface IClient extends Serializable {
    String        getDeviceID();
    void          setDeviceID(String id);
    String        getNickname();
    void          setNickname(String name);
    boolean       matches(IClient client);
}

他のクラスは次のとおりです。

import xxx.xxx.xxx.interfaces.IClient;

public class Client implements IClient {
    private static final long serialVersionUID = 1L;

    private   String deviceid;
    private   String nickname;

    public Client() {
        deviceid  = "";
        nickname  = "";
    }

@Override
public String getDeviceID() {
    return this.deviceid;
}

@Override
public void setDeviceID(String id) {
    this.deviceid = (id == null) ? "" : id.trim();
}

@Override
public String getNickname() {
    return this.nickname;
}

@Override
public void setNickname(String name) {
    this.nickname = (name == null) ? "" : name.trim();
}

@Override
public boolean matches(IClient client) {
    if (client != null) {
        if (client == this) {
            return true;
        }
        if (client.getDeviceID().equals(deviceid) &&     client.getNickname().equals(nickname)) {
            return true;
        }
    }
    return false;
}
}

したがって、ブール値を変換する方法がよくわかりません。コードはObjective-c atmにあります。IClientはプロトコルであり、Clientは次のようにそれを継承します。

Client.h

#import <Foundations/Foundation.h>
@protocol IClient <NSObject>
-(NSString*) DeviceID;
-(NSString*) Nickname;
-(BOOL) matches; // dont really know how to do that one
@end

IClient.h

#import <Foundations/Foundation.h>
#import "IClient.h"

@interface Client : NSObject <IClient>

//etc..

@end

どんな助けでも大歓迎です。

4

2 に答える 2

0

Hot Licks が既にコメントで述べているように、match メソッドの正しいパラメーター タイプは でありid<IClient>、これは「IClient プロトコルに準拠する任意の Objective-C オブジェクト」であり、インスタンス変数の代わりにプロパティを使用する必要があります。

次に、次のようになります。

IClient.h:

@protocol IClient <NSObject>
@property (nonatomic, copy) NSString *deviceID;
@property (nonatomic, copy) NSString *nickName;
-(BOOL)matches:(id<IClient>)client;
@end

Client.h:

#import <Foundation/Foundation.h>
#import "IClient.h"

@interface Client : NSObject <IClient>
// ...
@end

そして最後にClient.m:

#import "Client.h"

@implementation Client
@synthesize deviceID = _deviceID;
@synthesize nickName = _nickName;

- (BOOL)matches:(id<IClient>)client
{
    if (client != nil) {
        if (client == self)
            return YES;
        if ([client.deviceID isEqualTo:self.deviceID] && [client.nickName isEqualTo:self.nickName])
            return YES;
    }
    return NO;
}
@end

これらのステートメントにより、コンパイラは、インスタンス変数によって@synthesizeバックアップされるゲッター メソッドとセッター メソッドを作成します。_deviceID_nickName

通常、ステートメントも省略でき@synthesizeますが、プロトコルで定義されたプロパティは自動的に合成されません。

于 2013-09-17T13:01:58.640 に答える
0

低レベルのシリアル化を行う方法は次のとおりですオブジェクトレベルはNSArchiverNSCoder

于 2013-09-17T12:06:03.723 に答える