首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MetaType获得类名?

从MetaType获得类名?
EN

Stack Overflow用户
提问于 2014-08-29 23:21:55
回答 4查看 1.9K关注 0票数 2

在下面的示例中,T引用了扩展NSManagedObject的类型,那么为什么我不能调用。

我无权访问类的实例

代码语言:javascript
复制
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);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-02 19:58:43

Switf 2解

代码语言:javascript
复制
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
}
票数 1
EN

Stack Overflow用户

发布于 2014-08-30 19:59:07

Swift类可以被赋予一个定制的目标-C名称,这将使NSStringFromClass在操场上打印一个更好的输出。

代码语言:javascript
复制
import CoreData

@objc(User) class User : NSManagedObject {

}

let className = NSStringFromClass(User.self) // className will be "User" 

没有它,NSStringFromClass将打印“ModulName.ClassName”,这可以说比只打印“ClassName”更好。操场输出的丑陋是由于操场有一些神秘的隐含模块名。

票数 5
EN

Stack Overflow用户

发布于 2014-08-30 00:05:44

通过一些实验,我发现了以下几点。在游乐场你可以

代码语言:javascript
复制
class User : NSManagedObject {
}

let s = NSStringFromClass(User)  // cryptic output: "__lldb_expr_XX.User"

XX是一些随机数。此时,您可以使用

代码语言:javascript
复制
let entityName = s.pathExtension // "User"

有点烦人,但也许对你有用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25577448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档