2016-04-29 2 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 отражений. Но во всех этих случаях можно получить только имена свойств в классе - в примере выше name и value.

Тот же вопрос был задан в 2014 году - Swift: Get Variable Actual Name as String - и я надеюсь, что с тех пор существует решение в быстром 2.

ответ

3

Нет, нет никакого способа, чтобы сделать это.

Вы должны понимать, что в скомпилированном состоянии эта переменная обычно не существует. Он может быть оптимизирован или представлен только как элемент стека выполнения.

Даже на языках с гораздо лучшим отражением, которое имеет Свифт, обычно вы не можете проверять локальные переменные.

Если честно, получение имени локальной переменной динамически не имеет практического использования.

+0

Благодарим вас за внимание. Практическое применение в моем случае было бы сделать математическую структуру более удобной для пользователя, когда пользователь объявит переменные. Мне нужно сохранить имена переменных, и было бы неплохо, если бы я мог получить литерал исходного кода как имя по умолчанию. Конечно, запись 'let x = Parameter (« x », 2)' всегда является опцией, но не настолько элегантной. – dundee

+0

@dundee Проблема заключается в том, что после того, как вы напишете 'let y = x', ваша идея ломается. А как насчет возврата параметра из функции? Тогда переменная не указана ... – Sulthan

Смежные вопросы