2017-04-17 3 views
1

setter에서 문자열을 반환해야합니다. 어떻게해야합니까?setter의 신속한 반환 값

func example()->String{ 
    var _a = 5 
    var a: Int{ 
     set(newValue){ 
      _a = newValue 
      if _a < 0{ 
       //return a string here!! 
      } 
     }get{ 
      return _a 
     } 
    } 
    a = 0 
} 
+0

setter 설정 값 만 반환하지 않습니다. 그러나 당신은 당신의'example' 메쏘드에서 변수를 사용할 수 있습니다 –

+0

논리적으로 말하자면, * setter * ...의 값을 반환 할 수는 없습니다 ... –

+1

왜 어떤 값을 반환하겠습니까? 그것의 용도는 무엇입니까? – Sahil

답변

0

없음 당신이 불행하게도 그렇게 할 수 있지만 어쨌든 그렇게 할 수 있다면 매우 혼란 스러울 것입니다 : 여기에 코드입니다.

우리 모두는 클로저가 스위프트의 일등 시민이고 클로저가 중첩 될 수 있다는 것을 알고 있습니다. 여기서하고있는 것은 다른 클로저 안에 클로저를 넣고 내부 클로저에서 값을 반환하려고하는 것입니다. 그러나 클로저가 중첩 될 수 있다고해도 두 개의 다른 클로저는 두 개의 다른 클로저입니다. 중첩 된 클로저를 중첩되지 않은 클로저라고 생각하십시오.

func a(x: Int) { 
    func b() { 
     // use x here 
    } 
} 

을하지만 당신이뿐만 아니라이 중첩되지 않은 폐쇄와 함께 할 수있는 뭔가 : 물론 당신은 내부 폐쇄에 외부 폐쇄의 값을 사용할 수 있습니다.

func a() -> String { 
    b() 
} 

func b() { 
    return "" 
} 

어쨌든이 2 중첩되지 않은 폐쇄로 간단하게 할 수 없습니다

func a() -> String { 
    func b() { 
     return "" 
    } 

    b() 
} 

: 당신이 할하려는 것은 내부 폐쇄에서 값을 반환하여 외부 폐쇄 수익을 만드는 것입니다 , 당신이 정말로 일 수 있다면 당신의 코드를 이해하는 것은 매우 어려울 것입니다 이것을하십시오. 코드를 읽는 사람은 반환 할 값이 무엇인지 명시하는 return 문을 기대합니다. 그들은 무엇이든을 돌려 보내는

a = 0 

를 돌려 보낸다. 그들은 클로저가 리턴 할 값을 알기 위해 a의 설정기를 조사해야합니다. 이것은 코드에서 위아래로 많이 보았고 매우 불편했습니다.