在下面的示例中,T引用了扩展NSManagedObject的类型,那么为什么我不能调用。
我无权访问类的实例
private func getNewManagedObject <T: NSManagedObject>(type: T.Type) -> T {
// Let's assume all Entity Names are the same as Class names
let className = "" /*Somehow get class name from type ("User")*/
return NSEntityDescription.insertNewObjectForEntityForName(className, inManagedObjectContext: managedObjectContext) as T
}
getNewManagedObject(User.self);发布于 2016-08-02 19:58:43
Switf 2解
let className = String(Int.self) // String
let className2 = String(4.dynamicType) // Int
func doThings<T>(type: T.Type) -> String {
return String(T) // Whatever type passed
}发布于 2014-08-30 19:59:07
Swift类可以被赋予一个定制的目标-C名称,这将使NSStringFromClass在操场上打印一个更好的输出。
import CoreData
@objc(User) class User : NSManagedObject {
}
let className = NSStringFromClass(User.self) // className will be "User" 没有它,NSStringFromClass将打印“ModulName.ClassName”,这可以说比只打印“ClassName”更好。操场输出的丑陋是由于操场有一些神秘的隐含模块名。
发布于 2014-08-30 00:05:44
通过一些实验,我发现了以下几点。在游乐场你可以
class User : NSManagedObject {
}
let s = NSStringFromClass(User) // cryptic output: "__lldb_expr_XX.User"XX是一些随机数。此时,您可以使用
let entityName = s.pathExtension // "User"有点烦人,但也许对你有用。
https://stackoverflow.com/questions/25577448
复制相似问题