NSManagedObject 클래스 계층 구조가 있다고 가정합니다.슈퍼 클래스에 바인딩하여 사용자 지정 프로토콜을 스위프트 하위 클래스로 채택
class Dog: NSManagedObject {
var name: String?
}
class Person: NSManagedObject {
var name: String?
}
물론 코드를 복제하지 않으실 것입니다.
프로토콜을 선언하십시오.
protocol Has_Name_Protocol {
var name: String? {get}
}
extension Has_Name_Protocol {
static func predicate(name: String?) -> NSPredicate {
return predicate(names: [name])
}
static func predicate(names: [String?]?) -> NSPredicate {
return NSPredicate(format: "name == %@", argumentArray: names?.flatMap({$0}))
}
}
물론 충분하지 않습니다. 개체를 검색하는 find 메소드를 소개하고 싶습니다.
따라서 프로토콜을 클래스 계층 구조의 가장 낮은 경계에 바인딩해야합니다.
extension Has_Name_Protocol where Self: NSManagedObject {
static func find(name: String?, context: NSManagedObjectContext) -> Self? {
return nil
}
}
또한이 프로토콜에 맞는 하위 클래스의 확장을 추가하십시오.
extension Dog: Has_Name_Protocol {}
extension Person: Has_Name_Protocol {}
올바른 방법인가요?
생각해 보았지만 너무 복잡해 보입니다. 그러나 하위 클래스 확장에서 프로토콜을 채택하지 않으면 작동하지 않습니다. – gaussblurinc
물론 NSManagedObject 하위 클래스의 프로토콜을 채택해야합니다. – vadian