我怎样才能拥有一个对象并在运行时更改它的类型
How can I have one object and change it's type at runtime
我有一个方法被 3 种不同的方法调用。
每个方法都表明它希望通过标志从该方法接收回哪种数据。在这个例子中,让我们调用标志 'objectType'.
'calledMethod' 需要查看 objectType 并基于此创建正确的对象。
然后 'calledMethod' 需要 return 它收到的相同对象类型,以便调用方法获得正确的对象类型。
我在下面包含了示例代码,我知道它不正确,但它让您了解我正在努力实现的目标。请注意,所有 3 个对象都有 'testInt' objectKey。
例如
-(NSObject *)calledMethod : (int)objectType
{
NSObject *einStein;
switch (objectType)
{
case 1: // this is an NSUserDefaults object
einStein = [NSUserDefaults standardUserDefaults];
break;
case 2: // this is an PFUser object
einStein = [PFUser currentUser];
break;
case 3: // this is a custom object
einStein = [TestData personData];
break;
default:
break;
}
int *testCnt = [einStein objectForKey@"testInt"];
testCnt = testCnt++;
[einStein setObject:testCnt forKey:@"testInt"];
return einStein;
}
我认为 Sinisa 重新使用工厂模式可能是正确的,但是我当时实施起来太复杂了,所以以后会尝试
我有一个方法被 3 种不同的方法调用。
每个方法都表明它希望通过标志从该方法接收回哪种数据。在这个例子中,让我们调用标志 'objectType'.
'calledMethod' 需要查看 objectType 并基于此创建正确的对象。
然后 'calledMethod' 需要 return 它收到的相同对象类型,以便调用方法获得正确的对象类型。
我在下面包含了示例代码,我知道它不正确,但它让您了解我正在努力实现的目标。请注意,所有 3 个对象都有 'testInt' objectKey。
例如
-(NSObject *)calledMethod : (int)objectType
{
NSObject *einStein;
switch (objectType)
{
case 1: // this is an NSUserDefaults object
einStein = [NSUserDefaults standardUserDefaults];
break;
case 2: // this is an PFUser object
einStein = [PFUser currentUser];
break;
case 3: // this is a custom object
einStein = [TestData personData];
break;
default:
break;
}
int *testCnt = [einStein objectForKey@"testInt"];
testCnt = testCnt++;
[einStein setObject:testCnt forKey:@"testInt"];
return einStein;
}
我认为 Sinisa 重新使用工厂模式可能是正确的,但是我当时实施起来太复杂了,所以以后会尝试