我有一个Objective-C类别,我希望将其添加到多个类中,而不会重复该类别中包含的代码。我只想将相同的方法添加到多个类。
我有关于NSManagedObject
子类(Book
,Chapter
,Page
)的现有类别,我想以一种干净和可维护的方式在这些子类中添加通用功能。
一种方法是将类别添加到它们的公共超类(NSManagedObject
)中,但是当我想要将方法添加到三个NSManagedObject
子类(Book
,Chapter
,Page
)时,这会导致将类别的方法添加到所有的NSManagedObject子类中。
另一种解决方案是继承NSManagedObject
的子类,然后从该NSManagedObject
子类继承Book
、Chapter
和Page
。这是最干净、最直接的方法。这种方法的最大缺点是,当数据模型发生变化,Xcode重新生成子类时,它会将它们重新设置为从NSManagedObject
而不是SubclassedManagedObject
继承。如果可能的话,我会尽量避免使用类似mogenerator/Xmo这样的东西。
有没有可能在不复制代码的情况下在多个类上添加一个类别?
谢谢。
发布于 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())")
在所有三个类(Book
、Chapter
、Page
)上正确实现number()
:
myBook.number() = 5
myChapter.number() = 2
myPage.number() = 8
发布于 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
我也不喜欢这个,但它很管用
发布于 2012-02-26 12:47:15
为什么不在一个中心类中创建共享代码类级别的方法,您只需在每个类别中通过shell方法调用它?
如果您的类别存储了相关的引用,则可以将这些引用传递到类级别的方法中进行操作。
https://stackoverflow.com/questions/9450556
复制相似问题