在iOS中将对象转换为其子类(Turn an object into its subclass in iOS)

编程入门 行业动态 更新时间:2024-10-26 16:25:06
在iOS中将对象转换为其子类(Turn an object into its subclass in iOS)

我有一个Person对象,其中包含name , email , birthdate等内容。

我还有一个名为Member的Person子类,其中包含yearJoined , title等内容。

在我的代码中,如何将现有Person转换为Member ? 例如:

Member *mem = self.person;

我收到编译错误,因为类不匹配。 但是子类应该继承其父类的所有属性,所以我正在寻找一种方法来说“这个Person对象现在应该是一个Member对象”。

那有意义吗?

I have a Person object which contains things like name, email, birthdate, etc.

I also have a subclass of Person called Member, which contains things like the yearJoined, title, etc.

In my code, how can I take an existing Person and convert it to a Member? For example:

Member *mem = self.person;

I'm getting compiler errors because the classes don't match. But the subclass should inherit all the properties of its parent, so I'm looking for a way to just say "this Person object should now be a Member object."

Does that make sense?

最满意答案

一种方法是在Member类中声明initWithPerson类方法和memberFromPerson静态方法:

@interface Member : Person { NSString *title; ... } - (id)initWithPerson:(Person *)aPerson title:(NSString *)aTitle; + (Member *)memberFromPerson:(Person *)aPerson title:(NSString *)aTitle; @end

在您的实施中:

@implementation Member - (id)initWithPerson:(Person *)aPerson title:(NSString *)aTitle { if (self = [super initWithName:aPerson.name email:aPerson.email birthdate:aPerson.birthdate]) { self.title = aTitle; } return self; } + (Member *)memberFromPerson:(Person *)aPerson title:(NSString *)aTitle { return [[Member alloc] initWithPerson:aPerson title:aTitle]; } @end

然后,当您想将Person实例转换为Member ,您只需要调用:

Member *newMember = [Member memberFromPerson:myPerson title:@"New member!"];

当然,您可以自定义所有这些,具体取决于其他变量(如title或year)是否需要加入(您可以创建memberFromPerson:的版本memberFromPerson:如果正确初始化所有内容,则不需要任何其他参数)。

One way to do that would be to declare an initWithPerson class method and a memberFromPerson static method in your Member class:

@interface Member : Person { NSString *title; ... } - (id)initWithPerson:(Person *)aPerson title:(NSString *)aTitle; + (Member *)memberFromPerson:(Person *)aPerson title:(NSString *)aTitle; @end

And in your implementation:

@implementation Member - (id)initWithPerson:(Person *)aPerson title:(NSString *)aTitle { if (self = [super initWithName:aPerson.name email:aPerson.email birthdate:aPerson.birthdate]) { self.title = aTitle; } return self; } + (Member *)memberFromPerson:(Person *)aPerson title:(NSString *)aTitle { return [[Member alloc] initWithPerson:aPerson title:aTitle]; } @end

Then when you want to convert your Person instance into a Member, you just need to call:

Member *newMember = [Member memberFromPerson:myPerson title:@"New member!"];

Of course you can customize all this depending on how the other variables like title or year joined are required or not (you can create a version of memberFromPerson: without any other argument if you initialize everything properly).

更多推荐

本文发布于:2023-08-06 06:02:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1446132.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:子类   为其   中将   对象   iOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!