2017-03-11 5 views
0

내가 스위프트를 배우고 난스위프트 3 시도

let value = (try? getValue()) ?? "Default Value" 

그것은 작동하지만 내가 누락 될 수 있습니다 느낌을 단축 할 수있는 다음과 같은 코드

var value: String; 
do { 
    value = try getValue() 
} catch { 
    value = "Default Value" 
} 

을 테스트하고 있습니다 더 분명한 해결책입니다.

+2

다른 간단한 해결책이 있다고 생각하지 않습니다. 'let value = try? '를 사용할 수 있습니다. getValue() {'하지만 그것은 첫 번째 버전의 또 다른 변형입니다. – Sulthan

+1

_question_은 무엇입니까? – matt

+0

@matt 더 좋은 방법이 있습니까? 나는 Javascript (Node) 지식을 Swift 언어로 융합하기보다 신속한 방법을 시도하고있다. – Wainage

답변

1

당신의 솔루션은 훌륭하고 매우 우아합니다.

나는 첫 번째 줄에 var을 말하지 말고 나중에 변수를 초기화한다고 가정합니다. 일반적으로에서, 복잡한 초기화 즉시 값을 초기화 할 수있는 방법은 정의 및 호출 구조 사용하는 것입니다

let value: String = { 
    do { 
     return try getValue() 
    } catch { 
     return "Default Value" 
    } 
}() 

을 그리고 당신은 아마하고 싶은 것 그 catch 블록은 error 정보를 반환 한 경우 당신이 붙잡고 싶었던

그러나 의 경우 오류의 성격을 무시하면식이 훨씬 더 작아지고 정확히 수행 할 작업이 수행됩니다. try?은 선택 사항을 반환하며, 성공하면 다시 풀립니다. 실패 할 경우 nil을 반환하고 대체 값 ("Default Value")을 사용하게됩니다.

+0

내가 틀렸다고 정정 해 주겠지 만 근본적으로 즉각적인 람다라고 할 수 있겠는가? 특히 다른 오류를 처리해야하는 경우에는 매우 매끄럽습니다. – Wainage

+0

"본질적으로 즉각적인 람다입니다"당신은 당신의 LISP에 돈을 썼습니다. 자세한 내용은 여기 (http://www.apeth.com/swiftBook/ch02.html#SECdefineandcall) 및 여기 (http://www.apeth.com/swiftBook/ch03.html#_computed_initializer – matt

+0

) 링크 및 이 정보를 커뮤니티에 제공합니다. 나는 그것을 확실히 알아볼 것입니다. – Wainage