And*_*rew 20 cocoa cocoa-touch objective-c ios objective-c-category
我有一个Objective-C类别,我想在不重复类别中包含的代码的情况下添加到多个类中.我只想将相同的方法添加到多个类中.
我对现有类NSManagedObject的子类(Book,Chapter,Page),我想在所有这些子类的清洁和维护的方式添加常用功能.
一种方法是给类添加到他们的共同的超(NSManagedObject),但有增加类别的方法,所有的结果NSManagedObject子的时候我想的方法添加三个NSManagedObject子类(Book,Chapter,Page).
另一种解决办法是子类NSManagedObject,然后有Book,Chapter和Page来自继承NSManagedObject的子类.这是最干净,最直接的方法.这种方法的一大缺点是当数据模型发生变化并且Xcode重新生成子类时,它会将它们重置为继承NSManagedObject而不是继承SubclassedManagedObject.如果可能的话,我想避免使用像mogenerator/Xmo这样的东西.
是否可以在多个类上添加单个类别而无需重复代码?
谢谢.
小智 5
也许为时已晚..但是也许有一种方法可以做到..但是,您说..需要具有相同的超类
Category.h
@protocol MyProtocol <NSObject>
- (NSString*)foo;
@end
@interface NSArray (category) <MyProtocol> @end
@interface NSString (category) <MyProtocol> @end
Run Code Online (Sandbox Code Playgroud)
类别.m
@interface NSObject (category) <MyProtocol> @end
@implementation NSObject (category)
- (NSString*)foo
{
return @"bar";
}
@end
Run Code Online (Sandbox Code Playgroud)
我也不喜欢这样,但是可以用
我仍然不知道在 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())")
Run Code Online (Sandbox Code Playgroud)
number()在所有三个类 ( Book, Chapter, ) 上正确实现Page:
myBook.number() = 5
myChapter.number() = 2
myPage.number() = 8
Run Code Online (Sandbox Code Playgroud)