2016-04-29 28 views
1

有没有办法在Swift 2中获取变量的编译时间名称? 我的意思是第一个变量名,它引用了一个新的类实例,如果有的话。Swift:获取变量的编译时间名称(引用一个类)

下面是一个简单的例子:

public class Parameter : FloatLiteralConvertible { 
    var name:String? 
    var value:Double 
    // init from float literal 
    public required init (floatLiteral value: FloatLiteralType) { 
     self.value = Double(value) 
     self.name = getLiteralName() 
    } 
    func getLiteralName() -> String { 
     var literalName:String = "" 
     // do some magic to return the name 
     return literalName 
    } 
} 

let x:Parameter = 2.0 
print(x.value) // this returns "2.0" 
print(x.name!) // I want this to return "x" 

我已经检查了该主题的处理镜像或Objective-C的思考类似的问题。但在所有这些情况下,只能获得班级中的房产名称 - 在namevalue以上的示例中。

同样的问题已经被问在2014年 - Swift: Get Variable Actual Name as String - 我希望,因为再有就是迅速2.

回答

3

没有一个解决方案,有没有办法做到这一点。

你必须明白,在编译状态下该变量通常不存在。它可以被优化,或者它只被表示为执行堆栈上的一个项目。

即使在Swift具有更好反射的语言中,通常也不能检查局部变量。

说实话,动态获取本地变量的名称没有实际用例。

+0

谢谢,很高兴知道。在我的情况下,实际用法是在用户声明变量时使数学框架更加用户友好。我需要存储变量名称,如果我可以将源代码字面量作为默认名称,那将会很不错。当然,编写'let x = Parameter(“x”,2)'总是一个选项,但不是那么优雅。 – dundee

+0

@dundee问题是,一旦你写'let y = x',你的想法就会崩溃。那么从函数返回一个参数呢?然后变量是未命名的... – Sulthan