首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将同一类别添加到多个类

将同一类别添加到多个类
EN

Stack Overflow用户
提问于 2012-02-26 12:30:49
回答 6查看 3.1K关注 0票数 20

我有一个Objective-C类别,我希望将其添加到多个类中,而不会重复该类别中包含的代码。我只想将相同的方法添加到多个类。

我有关于NSManagedObject子类(BookChapterPage)的现有类别,我想以一种干净和可维护的方式在这些子类中添加通用功能。

一种方法是将类别添加到它们的公共超类(NSManagedObject)中,但是当我想要将方法添加到三个NSManagedObject子类(BookChapterPage)时,这会导致将类别的方法添加到所有的NSManagedObject子类中。

另一种解决方案是继承NSManagedObject的子类,然后从该NSManagedObject子类继承BookChapterPage。这是最干净、最直接的方法。这种方法的最大缺点是,当数据模型发生变化,Xcode重新生成子类时,它会将它们重新设置为从NSManagedObject而不是SubclassedManagedObject继承。如果可能的话,我会尽量避免使用类似mogenerator/Xmo这样的东西。

有没有可能在不复制代码的情况下在多个类上添加一个类别?

谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-08-12 05:28:45

我仍然没有意识到在Objective-C中有一种干净的方法来做到这一点,但在Swift 2.0中,这可以通过使用协议扩展来实现,方法是向现有协议添加功能和/或属性。然后,该协议可以被任意数量的类、结构和/或枚举所采用。

protocol Numbered {
    func number() -> Int
}

extension Numbered {
    func number() -> Int {
        return Int(arc4random()) % 10
    }
}

class Book : Numbered {

}

class Chapter : Numbered {

}

class Page : Numbered {

}

let myBook = Book()
let myChapter = Chapter()
let myPage = Page()

print("myBook.number() = \(myBook.number())")
print("myChapter.number() = \(myChapter.number())")
print("myPage.number() = \(myPage.number())")

在所有三个类(BookChapterPage)上正确实现number()

myBook.number() = 5
myChapter.number() = 2
myPage.number() = 8
票数 1
EN

Stack Overflow用户

发布于 2013-09-11 02:09:29

也许为时已晚..但是也许有一种方法可以做到这一点。但是你说过..。需要有相同的超类

Category.h

@protocol MyProtocol <NSObject>
- (NSString*)foo;
@end

@interface NSArray  (category) <MyProtocol> @end
@interface NSString (category) <MyProtocol> @end

Category.m

@interface NSObject (category) <MyProtocol> @end
@implementation NSObject (category)
- (NSString*)foo
{
    return @"bar";
}
@end

我也不喜欢这个,但它很管用

票数 5
EN

Stack Overflow用户

发布于 2012-02-26 12:47:15

为什么不在一个中心类中创建共享代码类级别的方法,您只需在每个类别中通过shell方法调用它?

如果您的类别存储了相关的引用,则可以将这些引用传递到类级别的方法中进行操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9450556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档