2014-09-03 22 views
2

假设我有以下代码行。需要从Swift中的var获取instanceName作为字符串

var instanceName = "someString" 

我将如何获得字符串格式的实例的名称,所以我可以使用它作为一个重点来存储在NSUserDefaults的变种? 所以在上面的情况下,我期待从instanceName获取“instanceName”...

后续问题: 如何通过使用字符串返回变量内容。例如。 "instanceName"

回答

3

您可以通过使用class_copyIvarList(因为我知道斯威夫特不支持可选的增值经销商),环比他们得到的类实例的所有变量和得到的名字。

var aClass : AnyClass? = self.dynamicType 
var propertiesCount : CUnsignedInt = 0 
let propertiesInAClass : UnsafeMutablePointer<Ivar> = class_copyIvarList(aClass, &propertiesCount) 

for var i = 0; i < Int(propertiesCount); i++ {         
    var propName:String = NSString(CString: ivar_getName(propertiesInAClass[Int(i)]), encoding: NSUTF8StringEncoding) 
}//for 

游乐场

class Myclass{ 

    var myInteger:Int = 1 
    var myBoolean:Bool = false 
    var myString:String = "heyStr" 

    func printValues(){ 
     var aClass : AnyClass? = self.dynamicType 
     var propertiesCount : CUnsignedInt = 0 
     let propertiesInAClass : UnsafeMutablePointer<Ivar> = class_copyIvarList(aClass, &propertiesCount)   

     for var i = 0; i < Int(propertiesCount); i++ { 
     var propName:String = NSString(CString: ivar_getName(propertiesInAClass[Int(i)]), encoding: NSUTF8StringEncoding) 

     println(propName) 
    }//for 
    }  
} 

var mc:Myclass = Myclass() 
mc.printValues() 

输出:

myInteger 
myBoolean 
myString 

[EDIT 1]

Ivar指的是Objective-C运行:

/// An opaque type that represents an instance variable. 
typealias Ivar = COpaquePointer 

[编辑2]

如果你感兴趣的获取值也做两件事情:

  • 继承你的cass从NSObject ae class Myclass:NSObject{..}
  • var propValue : AnyObject! = self.valueForKey(propName)

顺便说一句,如果你想将它们存储到一些解释,你需要1检查它们的类型。因为你已经propValue定义为AnyObject

+0

我得到未申报类型的使用“伊瓦尔在您的操场上线12 ... – P5ycH0 2014-09-04 06:21:02

+0

@ P5ycH0看到我对伊瓦 – 2014-09-04 07:06:00

+0

没问题编辑,代码运行在我的项目罚款。 Thnx – P5ycH0 2014-09-04 07:13:34

相关问题