[if-statement] 신속한 평가 방법은 어떻게 평가됩니까?


1 Answers

선택 사항은 설정 또는 설정되지 않음 ... 중요한 결정을 남겨 둡니다. "두 상태 모두 올바르게 작동 할 수 있도록 코드를 작성해야합니까?" 선택 사항을 푸는 방법은 우리를 위해 결정하는 것입니다.

설정되지 않은 옵션에 대응하는 데 사용할 수있는 여러 가지 방법이 있습니다.

  • 추락!
  • 값을 설정하지 않은 경우 무언가를 기본값으로 지정하십시오.
  • 정상적으로 실패하면 아무것도하지 않고 값이 설정된 경우 에도 할당합니다.
  • 그러나 값이 설정 되면 정상적으로 실패합니다 ... 무언가를하십시오 (단 하나의 과제 이상입니다).

아래는 4 가지 접근법입니다.

값이없는 경우 강제 unwrap 을 사용하면 충돌이 발생합니다. 예를 들어 영화 제목 (모든 영화는 반드시 이름이 있어야 함) 과 같이 중요한 가치가있는 경우이 작업을 수행해야합니다. ! 강제 언 랩핑에 사용됩니다.

movieTitle = movie.title!

nil coalescing을 사용하면 값을 설정하지 않으면 충돌을 일으키지 않고 설정되지 않은 경우 아무 것도 설정하지 않을 것이라는 의미로 제어력향상 시키는 또 다른 방법입니다. 예를 들어, 이름이 설정되지 않은 경우 영화의 이름을 기본값 / untitled_movie로 설정합니다. ?? nil coalescing에 사용됩니다.

var movieTitle = movie.title ?? "untitled_Movie"

옵션 체인 을 사용하면 값이없는 경우 아무 작업도 수행하지 않고 값이있는 경우 값을 설정합니다. 값 설정이 중요 하지 않은 무언가, 즉 배우의 에이전트 이름에 대해 이렇게합니다. ? 선택적 연결에 사용됩니다.

let agent = movie.leadActor?.agent //would not crash if you don't have a lead actor (optional chaining)
let agent = movie.leadActor!.agent //would crash if you don't have a lead Actor (forced wrapping)  

if-let (또는 두 가지 유형의 선택적 바인딩 인 guard )을 사용하면 더 많은 제어 가 가능하며 값을 설정하지 않으면 충돌이 발생하지 않습니다. 값이 설정되면, 당신은 무언가를 할 수 있습니다. 설정되어 있지 else 문을 추가 할 수 있습니다.

if let supportingActor = movie.supportingActor{
print(" The supporting actor is \(supportingActor)}

이것은 언 래핑의 가장 일반적으로 사용되는 방법이며, 강제 언 래핑은 다소 권장되지 않습니다. 낙담하는 이유에 대한 자세한 설명은 here 참조 here . guardif-let 잘 비교하려면 guard vs. if-let 참조하십시오.

사이드 노트 :

선택적 바인딩과 선택적 체인은 일반적으로 함께 사용됩니다.

if let agent = movie.leadActor?.agent {
ContactInfo = agent.phoneNumber
} // if-let is the optional *binding* part, the movie dot leadActor dot is the optional *chaining*
Question

스위프트 사이트에서이 코드를 보았고 여러 게시물을 보았습니다. 기본 사항을 파악하려고합니다. 이 선은 어떻게 평가됩니까?

if let name = optionalName {

나는 이름 == 선택적인 이름이 아니기 때문에 혼란 스럽습니다. 그래서 값을 할당하고 있습니다. 그렇다면 그 보고서는 어떻게 사실입니까? 그리고 존 사과 사과즙으로 대체 할 때 그 사과는 여전히 평등하게됩니다.

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}



약한 참조 로 작업 할 때마다 선택적 형식 을 사용 하면 코드를 안전하게 보호하고 충돌을 피할 수 있습니다. 다음은 예제입니다

var middleName :String? = "some thing"
if let isExistsMiddleName = middleName {
// do some thing here
} else {
// no middle name
}


Related