Swift의 Closure에서 '$ 0'은 결국 누구입니까?
8827 단어 Swift
원래 Closure는 뭐야.
Sift. 오 rg 에 의하면, 다음의 정의가 되고 있습니다.
Closures are self-contained blocks of functionality that can be passed around and used in your code.
번역: 클로저는 코드 내에서 전달하고 사용할 수 있는 기능의 자체 완결형 블록입니다.
이 기능(원문에서는 functionality)이라는 부분이 중요하고, Closure를 이용하면 무엇인가 임의의 행동을 다른 어딘가에 건네주고, 자신의 코드의 개소가 아닌 전혀 다른 장소에서 행동을 일으킬 수 있다고 하는 것이 재미있는 점이라고 생각합니다.
(여기서의 행동은 무엇인가 변수를 조작하거나, 성공시의 핸들러라고 하는 것 같은 프로그램으로서의 움직임 전반을 가리키고 있습니다)
Closure는 어떻게 쓰는 거야 & $0은 뭐야.
Swift의 Closure는 다음과 같이 설명 할 수 있습니다.
let result: ((Int) -> Bool) = { price -> Bool in
if price < 1500 {
return true
} else {
return false
}
}
이것만으로 간단하기 때문에 아래와 같이 더 짧게 할 수 있습니다.
let result((Int) -> Bool) = { price -> Bool in
return price < 1500
}
이 방법을 사용하면
$0
의 줄 바꿈도 제거 할 수 있으므로 다음과 같이 청소할 수 있습니다 let result((Int) -> Bool) = { price -> Bool in return price < 1500 }
Closure의 Shorthand Argument Names
위를 여러 번 정의에서 쓰는 것은 힘들기 때문에 여기서 Swift가 신경을 써주고 클로저가 1행일 때는 클로저 내부에서 이용할 수 있다. 해줘.
let result: ((Int) -> Bool) = { return $0 < 1500 }
Swift.org에서 다음과 같이 설명합니다.
Swift automatically provides shorthand argument names to inline closures, which can be used to refer to the values of the closure’s arguments by the names\$0,\$1,\$2, and so on.
번역 : Swift는 인라인 클로저에 단축 인수 이름을 자동으로 제공합니다. 이를 사용하여 클로저 인수의 값을 $0, $1, $2 등의 이름으로 참조할 수 있습니다.
이 때문에, Swift의 Closure에서 자주 사용하고 있다
return price <= 1500
는 실은, Swift가 신경쓰게 해 만들어 주는 가인수명이야, 라고 하는 이야기였습니다.보충: $0는 충돌합니다.
closure에 closure를 쓰려는 경우
$0
를 사용하면 이름이 충돌하여 컴파일 할 수 없습니다.let sources = [[1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10]]
sources.forEach({ print($0.forEach({ print($0) }) })
// ↑ $0の名前が衝突してコンパイルできなくなる
그래서이 경우 솔직하게 인수 이름을 정의해 봅시다.
let sources = [[1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10]]
sources.forEach({ values -> Void in print(values.forEach({ value -> Void in print(value) })) })
위의 예에서는 어느 쪽에도 인수를 정의하고 있습니다만,
$0
가 충돌만 하지 않으면 괜찮기 때문에, 어느 쪽인가 한쪽만으로도 괜찮다고 생각합니다(아마)이것으로 내일부터 컴파일 에러에 곤란해도 아마 괜찮습니다!
Reference
이 문제에 관하여(Swift의 Closure에서 '$ 0'은 결국 누구입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/h1d3mun3/items/ebe5ae4acda2af77c97b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)