2016-08-13 3 views
3

는 스위프트에서 당신은 쉽게하지만, 내가 지금처럼 반원 동일한 작업을 수행하는 방법을 알아낼 수 없습니다 ...과 같이,C#의 'nameof()'문과 동일한 Swift가 있습니까?

enum Foo 
{ 
    case laa1 
    case laa2 
    case laa3 
} 

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

을 열거의 경우 이름의 캐릭터 라인 표현을 얻을 수 있습니다. ... C#에서

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 

, 그것은 nameof 덕분에 쉽습니다. 이처럼 문자열 표현을 원하는 멤버를 전달하기 만하면됩니다 ...

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

Swift와 동일한 기능이 있습니까?

+0

이미 속성의 이름을 알고있는 경우 'let varHoldingTheStringLaa1 = "laa1"' –

+1

Swift의 반사 기능은 진행 중이며 내가 읽은 바로는 그 진행의 끝점이 무엇인지 명확하지 않습니다. 관심이 있으시면, 지난 봄, 신속한 진화 목록에 대한 최근 토론이 있습니다. 그러나 현재는'nameof()'와 비교할만한 연산이 없다. –

+2

다른 코드는 hard.coding 문자열을 피하려고하기 때문에 코드화되어 있습니다. 나는 리팩토링 지원을 원한다. 바라건대 Swift는 C#에서 특히 반사 형 SDK를 사용하여이 기능을 유용하게 사용할 수 있습니다. – MarqueIV

답변

-1

은 푸 내에서이 같은 반사를 사용할 수 있습니다 그렇지 않으면

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

푸의 인스턴스를 보유 할 때이처럼 뭐지 수 있습니다

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

이들은 서문을 기반으로 한 것 같습니다. 그러나, 나는 이미 문자열 표현을 원한다는 것을 알고있다. 이는 서수를 사용하지 않고 회원 스스로 대신 수정할 수 있습니까? (자세한 내용은 아래 답변에 대한 내 의견을 참조하십시오.) – MarqueIV

관련 문제