반응형
?? 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
문장 person
이 favoriteSnacks
그것 에서 벗어나지 못하면 Candy Bar가snackName
nil-coalescing 연산자 a ?? b
는a != 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
반응형
'development' 카테고리의 다른 글
asp.net ID는 로그인 한 사용자의 모든 역할을 가져옵니다. (0) | 2021.01.10 |
---|---|
iOS : 모든 핵심 데이터 Swift 삭제 (0) | 2021.01.10 |
레이블이있는 경우에도 "시스템에서 지정된 배치 레이블을 찾을 수 없습니다"가 발생하는 이유는 무엇입니까? (0) | 2021.01.10 |
남은 시간 계산 (0) | 2021.01.10 |
Clojure에서 LazySeq 문자를 문자열로 어떻게 변환 할 수 있습니까? (0) | 2021.01.10 |