假设有以下构造函数:
required init (pTableName : String, pRecordKey : String, pStartAtRecord : Int){
parameters.append(ChildElement(identifier: "pTableName", value: pTableName))
parameters.append(ChildElement(identifier: "pRecordKey", value: pRecordKey))
parameters.append(ChildElement(identifier: "pStartAtRecord", value: pStartAtRecord))
}
我希望提取所有参数变量的名称,例如pTableName,pRecordKey等。为什么呢?首先,我可能有超过30个不同的类,它们具有不同的构造函数参数,并将它们传递到参数数组中。其次,所有的构造函数都有不同的签名,但主要是做相同的事情——创建ChildElements并将它们附加到参数列表中——之后构成Web服务的SOAP请求。
通过获取变量名的能力(例如,pTableName应该生成“pTableName”:String),我想实现以下目标:
required init (pTableName : String, pRecordKey : String, pStartAtRecord : Int){
appendToParameters([pTableName, pRecordKey, pStartAtRecord])
}
这将为数组的每个元素产生:
parameters.append(ChildElement(identifier: Reflection.getName(var), value : var))
ChildElement类的结构与以下相同:
class ChildElement : Element {
var attributes : [String : String] = [:]
var identifier : String
var value : AnyObject
var toString : String {
return "<\(identifier) \(self.concatinateAttributesAsString())>\(value)</\(identifier)>"
}
required init (identifier : String, value : AnyObject) {
self.identifier = identifier
self.value = value
}
然而,在Swift中,没有使用反射和宏等方式获取变量名称的可能性,这与Objective-C不同:
#define variableName(var) [NSString stringWithFormat:@"%s",#var]
如果我试图通过Objective C方法使用宏,然后在Swift中应用:
-(NSString *)getVarName:(id)var {
return variableName(var)
}
当然,返回的NSString值将等于“var”。
通常,我如何在Swift中使用反射来获取参数变量的名称,就像这个例子一样?到目前为止,我已经查看了许多资源,从苹果的文档到运行时API和类似的资源,但不幸的是,没有一个预定义的运行时方法在Swift中适用。
ChildElement
类/结构体吗? - dfrib