development

??

big-blog 2021. 1. 10. 19:51
반응형

?? Swift의 연산자


"The Swift Programming Language"책 (599 페이지)에서 나는이 코드 조각을 보았습니다. 다음과 같이 진행되었습니다.

func buyFavoriteSnack(person:String) throws {
    let snackName = favoriteSnacks[person] ?? "Candy Bar"
    try vend(itemName:snackName)
}

그 설명은 다음과 같습니다.

buyFavoriteSnack (_ :) 함수는 주어진 사람이 좋아하는 간식을 찾아서 구매하려고합니다. 좋아하는 간식이 목록에 없으면 캔디 바를 사려고합니다. 만약 그들이...

이 설명이 "??"에 어떻게 매핑 될 수 있습니까? 주어진 코드에서 연산자. 우리 자신의 코드에서이 구문을 언제 사용해야하거나 사용할 수 있습니까?


"nil 통합 연산자"( "기본 연산자"라고도 함)입니다. a ?? b의 값이다 a(즉, a!), 않는 a이다 nil,이 경우는 산출 b. 즉, favouriteSnacks[person]누락 된 경우 "Candy Bar"대신 할당 반환합니다 .

기술적으로 편집 은 다음과 같이 해석 될 수 있습니다. (아래 Badar Al-Rasheed의 답변에서)

let something = a != nil ? a! : b

let something = a ?? b

방법

let something = a != nil ? a! : b

이:

let snackName = favoriteSnacks[person] ?? "Candy Bar"

다음과 같습니다.

if favoriteSnacks[person] != nil {
    let snackName = favoriteSnacks[person]    
} else {
    let snackName = "Candy Bar"
}

말로 설명하면, let문장 personfavoriteSnacks그것 에서 벗어나지 못하면 Candy Bar가snackName


nil-coalescing 연산자 a ?? ba != nil ? a! : b


@Icaro의 답변에 추가하면 초기화하지 않고도 값을 선언 할 수 있습니다. 제 생각에는 이것이 더 좋습니다.

func buyFavoriteSnack(person:String) throws {
    // let snackName = favoriteSnacks[person] ?? "Candy Bar"
    let snackName: String

    if let favoriteSnackName = favoriteSnacks[person] {
        snackName = favoriteSnackName
    } else {
        snackName = "Candy Bar"
    }

    try vend(itemName:snackName)
}

참조 URL : https://stackoverflow.com/questions/30772063/operator-in-swift

반응형