清洁架构,业务对象,iOS的实现

时间:2013-01-22 03:01:01

标签: ios objective-c

我在目标C中有一个类,它代表一个通用的业务对象(假设我的问题是银行帐户)。我有一个java C#background(FYI)。现在这个bankAccount有一个枚举属性,用于定义它的类型,以及NSURl属性

        //this is in the bankAccount.h file
        typedef enum {Checking, Savings, Investor} AccountType;
        -(NSURL *)url;

现在,用户可以创建新的银行帐户并将枚举设置为相关类型。在分配了新的bankaccount对象后,他们可能需要访问url属性,因此我必须为该属性实现一个getter,它将正确初始化它。我的问题是,我怎么知道调用类为我的bankaccount创建了什么类型的银行帐户才能正确初始化url属性?

就像现在这是我在bankaccount.m文件中实现url的方式:

 -(NSURL *)url {   
       if (url != NULL) {
       return url;
       }
  NSString *filePath;
  // figure out the file path base on account type
  switch (AccountType) {
  }

  return url;

}

请记住,这是在Bankaccount.m文件中,它在调用类中实际上不知道正在创建的实例是什么。也许我很困惑,也许这是一个简单的答案,但我无法理解这个概念。

感谢帮助人员。

1 个答案:

答案 0 :(得分:1)

我认为您忘记了无法在枚举中准确保存信息。将枚举的值保存在某个变量中。 你不一定要像这样设置你的代码,但也许这就是你想要的更多。

// BankAccount.h
#import <Foundation/Foundation.h>
typedef enum {
    Checking = 1,
    Savings = 2,
    Investor = 3
} AccountType;

@interface BankAccount : NSObject
-(void)setAccountType:(AccountType)theType; //Setter
-(NSURL *)url;
@end

// BankAccount.m
#import "BankAccount.h"
@implementation BankAccount

-(void)setAccountType:(AccountType)theType {
    self.bankAccountType = theType;
}

-(NSURL *)url {
    NSURL *someUrl;
    switch (self.bankAccountType) {
        case Checking:
            someUrl = [NSURL URLWithString:@"http://xzyChecking"];
            break;
        case Savings:
            someUrl = [NSURL URLWithString:@"http://xzySavings"];
            break;
        case Investor:
            someUrl = [NSURL URLWithString:@"http://xzyInvestor"];
            break;
        default:
            someUrl = [NSURL URLWithString:@"http://xzyError"];
            break;
    }
    return someUrl;
}

@end