大佬教程收集整理的这篇文章主要介绍了如何在NSManagedObject Swift扩展中创建托管对象子类的实例?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
帮帮我?
extension NsmanagedObject { class func createInContext(context:NsmanagedObjectContext) -> Self { var classname = className() var object: AnyObject = NSEntityDescription.insertNewObjectForEntityForName(classname,inManagedObjectContext: context) return object } class func className() -> String { let classString = NSStringFromClass(self) //Remove Swift module name let range = classString.rangeOfString(".",options: NSStringCompareOptions.CaseInsensitiveSearch,range: Range<String.Index>(start:classString.starTindex,end: classString.endIndeX),locale: nil) return classString.subStringFromIndex(range!.endIndeX) } }
extension NsmanagedObject { class func createInContext(context:NsmanagedObjectContext) -> Self { return createInContextHelper(context) } private class func createInContextHelper<T>(context:NsmanagedObjectContext) -> T { let classname = entityName() let object = NSEntityDescription.insertNewObjectForEntityForName(classname,inManagedObjectContext: context) as! T return object } class func entityName() -> String { let classString = NSStringFromClass(self) // The entity is the last component of dot-separated class name: let components = split(classString,{ $0 == "." }) return components.last ?? classString } }
然后
let obj = YourEntity.createInContext(context)
作品和编译器将obj的类型正确地声明为YourEntity.
更新:使用How to use generic types to get object with same type中的想法,也可以使用全局可重用的函数而不是帮助程序来将返回值转换为适当的类型:
func objcast<T>(obj: AnyObject) -> T { return obj as T } extension NsmanagedObject { class func createInContext(context:NsmanagedObjectContext) -> Self { let classname = entityName() let object: AnyObject = NSEntityDescription.insertNewObjectForEntityForName(classname,inManagedObjectContext: context) return objcast(object) } class func entityName() -> String { let classString = NSStringFromClass(self) // The entity is the last component of dot-separated class name: let components = split(classString,{ $0 == "." }) return components.last ?? classString } }
Swift 1.2 / Xcode 6.3和Swift 2 / Xcode 7的更新:
func objcast<T>(obj: AnyObject) -> T { return obj as! T } extension NsmanagedObject { class func createInContext(context:NsmanagedObjectContext) -> Self { let classname = entityName() let object: AnyObject = NSEntityDescription.insertNewObjectForEntityForName(classname,inManagedObjectContext: context) return objcast(object) } class func entityName() -> String { let classString = NSStringFromClass(self) // The entity is the last component of dot-separated class name: let components = classString.componentsSeparatedByString(".") return components.last ?? classString } }
或者使用unsafeBitCast而不是帮助方法,如注释中所建议的:
extension NsmanagedObject { class func createInContext(context:NsmanagedObjectContext) -> Self { let classname = entityName() let object: AnyObject = NSEntityDescription.insertNewObjectForEntityForName(classname,inManagedObjectContext: context) return unsafeBitCast(object,self) } class func entityName() -> String { let classString = NSStringFromClass(self) // The entity is the last component of dot-separated class name: let components = classString.componentsSeparatedByString(".") return components.last ?? classString } }
以上是大佬教程为你收集整理的如何在NSManagedObject Swift扩展中创建托管对象子类的实例?全部内容,希望文章能够帮你解决如何在NSManagedObject Swift扩展中创建托管对象子类的实例?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。