Как использовать структуру и объединение в классеjective? - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь получить доступ к структуре в рамках класса C.Но я не успешен.Кто-нибудь может объяснить, как этот класс нужно настроить, чтобы он компилировался и обращался к переменным-членам?

Ответы [ 4 ]

2 голосов
/ 30 ноября 2011

Попробуйте следующее (показав один в качестве примера, но применимо ко всем), используйте typedef и переместите имя за пределы объявления ....

typedef enum {    
        SAVINGS,   
        LOAN,   
        FIXED_DEPOSIT  
} ACCOUNT_TYPE;

The you use ...

ACCOUNT_TYPE type;  
AccountData accountData;
1 голос
/ 30 ноября 2011

Я бы порекомендовал использовать подклассы как:

@interface Account : NSObject {
    NSMutableString *accountId;
    NSMutableString *accountName;
}
@end

@interface SavingsAccount : Account {
    NSMutableString *accountType;
    NSMutableString *balance;
    NSMutableString *currency;
}
@end

@interface LoanAccount : Account {
    NSMutableString *balance;
}
@end

@interface FixedDepositAccount : Account {
    NSMutableString *depositAmount;
    NSMutableString *roi;
}
@end

Свойства пропущены, а accountName перемещен в учетную запись базового класса, поскольку он является общим для всех 3 подклассов.

1 голос
/ 30 ноября 2011

Я бы порекомендовал использовать ключевое слово typedef:

typedef NS_ENUM(NSUInteger, ACCOUNT_TYPE) {
    SAVINGS = 0,
    LOAN,
    FIXED_DEPOSIT
};

typedef struct _SavingsData {  
        NSMutableString* accountName;  
        NSMutableString* accountType;  
        NSMutableString* balance;  
        NSMutableString* currency;  
} SavingsData; 

@interface Account : NSObject

@property (nonatomic, strong) NSMutableString* accountId;  
@property (nonatomic, assign) ACCOUNT_TYPE type;  
@property (nonatomic, assign) SavingsData savingData; 

@end

Теперь вы можете использовать этот класс как:

Account *acc = [Account new];
acc.type = SAVINGS;
SavingsData savData = {..., ...};
acc.savingsData = savData;
1 голос
/ 30 ноября 2011

У вас должно быть статическое значение

@interface Account : NSObject {  
        union AccountData accountData;  
}

@property (nonatomic, assign) union AccountData accountData;  

В противном случае вам нужно будет динамически создать его в init (или установить его в NULL).Также вам необходимо убедиться, что все эти указатели NSMutableString в вашей структуре правильно инициализированы, равны нулю или нет.Также вы должны быть осторожны с управлением памятью, так как строки не будут сохраняться при передаче строк (вы можете переопределить установщик / получатель для структуры, чтобы соответственно сохранить / освободить NSMutableString).

...