我正在构建一个从服务器提供用户数据的库,但我不想定义具体的类,因为我希望最终用户能够指定他们想要的任何父类(例如:{{ 1}})。我还想通过ObjectMapper库提供映射功能。
我目前的想法是编写一个名为NSManagedObject
的协议,该协议声明了所有变量和父协议,并在协议上使用扩展来添加映射和网络功能。
这是我的第一次尝试:
User
这个问题是我不能从静态上下文中调用protocol GenericUser: Mappable {
var name: String { get set }
var email: String { get set }
}
extension GenericUser {
mutating func dynamicMapping(map: Map) {
name <- map["name"]
email <- map["email"]
}
}
class AppSpecificUser: NSManagedObject, GenericUser {
@NSManaged var name: String
@NSManaged var email: String
@NSManaged var uid: String
required convenience init?(_ map: Map) {
self.init()
}
func mapping(map: Map) {
dynamicMapping(map)
uid <- map["generic_bag"]["uid"]
}
}
函数(self是不可变的)。但是,如果我未将mutating
函数指定为dynamicMapping()
,则无法操纵名称和电子邮件属性。
有办法做到这一点吗?