2016-08-13 2 views
3

В Swift вы можете легко получить строковое представление имени случае перечисления, как и так ...Есть ли бычный эквивалент выражения C# 'nameof()'?

enum Foo 
{ 
    case laa1 
    case laa2 
    case laa3 
} 

let varHoldingTheStringLaa1 = String(Foo.laa1) // Returns the string 'laa1' 

Однако, я не могу понять, как сделать то же самое для члена класса, как так. ..

class Foo 
{ 
    var laa1:String = "" 
    var laa2:String = "" 
    var laa3:String = "" 
} 

// None of these work... 
let varHoldingTheStringLaa1 = String(laa1)  // Returns the value stored in laa1, not 'laa1' 
let varHoldingTheStringLaa1 = String(Foo.laa1) // Won't even compile 

В C#, это легко, благодаря nameof. Вы просто передаете члену, которому хотите получить строковое представление, подобное этому ...

let varHoldingTheStringLaa1 = nameof(laa1) // Returns the string 'laa1' 

Итак, есть ли эквивалент Swift?

+0

Если вы уже знаете имя свойства , почему бы просто не назначить литерал, например: 'let varHoldingTheStringLaa1 =" laa1 "' –

+1

Отражающие способности Swift являются незавершенными, и из того, что я прочитал, даже не ясно, какова конечная точка этого прогресса. Если вас это интересует, недавняя дискуссия, прошедшая весной, в списке быстрой эволюции. В настоящее время, однако, нет операции, сравнимой с 'nameof()'. –

+2

Codedifferent, это потому, что я стараюсь избегать строк hard.coding. Мне нужна поддержка рефакторинга. Надеюсь, Swift добавит это, поскольку это очень полезно в C#, особенно с отражающими sdks. – MarqueIV

ответ

-1

Изнутри Foo вы можете использовать отражение, как это:

let mirror = Mirror(reflecting: self) 
let laa1String = mirror[0].0 
let laa2String = mirror[1].0 

В противном случае при проведении экземпляр Foo вы можете Youse это следующим образом:

let fooInstance = Foo() 
let mirror = Mirror(reflecting: fooInstance) 
let laa1String = mirror[0].0 
let laa2String = mirror[1].0 
+0

Кажется, что они основаны на ординалах. Тем не менее, я уже знаю член, для которого я хочу представление строки. Может ли это быть изменено, чтобы не использовать ординалы, а вместо самих членов? (Более подробно см. Мой комментарий к приведенному ниже ответу.) – MarqueIV

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

  • Нет связанных вопросов^_^