다른 사용 사례에는 몇 가지 뉘앙스가 있지만 일반적으로 밑줄은 "무시"를 의미합니다.
새로운 함수를 선언 할 때 밑줄은 Swift에게 매개 변수가 호출 될 때 레이블이 없어야한다고 알려줍니다. 더 완전한 함수 선언은 다음과 같습니다.
func myFunc(label name: Int) // call it like myFunc(label: 3)
"label"은 인수 레이블이며 함수를 호출 할 때 있어야합니다. Swift 3부터는 기본적으로 모든 인수에 레이블이 필요합니다. "name"은 함수 내에서 사용하는 해당 인수의 변수 이름입니다. 짧은 형식은 다음과 같습니다.
func myFunc(name: Int) // call it like myFunc(name: 3)
이것은 외부 인수 레이블과 내부 매개 변수 이름 모두에 동일한 단어를 사용할 수있는 바로 가기입니다. 와 같습니다 func myFunc(name name: Int)
.
매개 변수 레이블없이 함수를 호출 할 수있게하려면 밑줄 _
을 사용하여 레이블을 아무 것도 / 무시하지 않도록하십시오. (이 경우 매개 변수를 사용하려면 내부 이름을 제공해야합니다.)
func myFunc(_ name: Int) // call it like myFunc(3)
할당 문에서 밑줄은 "아무것도 할당하지 않음"을 의미합니다. 결과를 반환하지만 반환 된 값은 신경 쓰지 않는 함수를 호출하려는 경우이 옵션을 사용할 수 있습니다.
_ = someFunction()
또는 연결된 기사에서와 같이 반환 된 튜플의 한 요소를 무시합니다.
let (x, _) = someFunctionThatReturnsXandY()
정의 된 함수 유형을 구현하는 클로저를 작성할 때 밑줄을 사용하여 특정 매개 변수를 무시할 수 있습니다.
PHPhotoLibrary.performChanges( { /* some changes */ },
completionHandler: { success, _ in // don't care about error
if success { print("yay") }
})
마찬가지로, 프로토콜을 채택하거나 수퍼 클래스 메소드를 대체하는 함수를 선언 할 때 _
매개 변수 이름 을 사용 하여 매개 변수 를 무시할 수 있습니다 . 프로토콜 / 수퍼 클래스에도 매개 변수에 레이블이 없음을 정의 할 수 있으므로 두 개의 밑줄을 연속으로 작성할 수도 있습니다.
class MyView: NSView {
override func mouseDown(with _: NSEvent) {
// don't care about event, do same thing for every mouse down
}
override func draw(_ _: NSRect) {
// don't care about dirty rect, always redraw the whole view
}
}
마지막 두 스타일과 관련이 있습니다. 로컬 변수 / 상수를 바인딩하는 흐름 제어 구문을 사용할 _
때이를 무시하는 데 사용할 수 있습니다 . 예를 들어 멤버에 액세스 할 필요없이 시퀀스를 반복하려면 다음을 수행하십시오.
for _ in 1...20 { // or 0..<20
// do something 20 times
}
switch 문에서 튜플 케이스를 바인딩하는 경우이 예에서와 같이 밑줄은 와일드 카드로 작동 할 수 있습니다 ( The Swift Programming Language의 단축 ).
switch somePoint { // somePoint is an (Int, Int) tuple
case (0, 0):
print("(0, 0) is at the origin")
case (_, 0):
print("(\(somePoint.0), 0) is on the x-axis")
case (0, _):
print("(0, \(somePoint.1)) is on the y-axis")
default:
print("(\(somePoint.0), \(somePoint.1)) isn't on an axis")
}
(주석에서 언급 한 바와 같이) 나는 이후 포함됩니다 마지막으로 아주 관련이없는 것 일, 그러나 여기 사람들을 이끌없는 것 :는 밑줄을 에 - 예를 들어 식별자 var _foo
, func do_the_thing()
, struct Stuff_
- 스위프트에 특히 아무 의미도 있지만, 몇 가지 용도로 사용 프로그래머들 사이에서.
이름 내의 밑줄은 스타일 선택이지만 Swift 커뮤니티에서는 선호되지 않습니다. Swift 커뮤니티에서는 유형에 UpperCamelCase를 사용하고 다른 모든 기호에 대해서는 lowerCamelCase를 사용하는 것에 대한 강력한 규칙이 있습니다.
밑줄로 기호 이름 앞에 접두사를 붙이거나 접미사를 붙이는 것은 스타일 규칙으로, 역사적으로 개인용 / 내부 용 전용 기호를 내 보낸 API와 구별하는 데 사용됩니다. 그러나 Swift에는 액세스 수정자가 있으므로이 규칙은 일반적으로 Swift에서 비 아이디 오닉으로 간주됩니다.
func __foo()
Apple SDK의 깊이에 이중 밑줄 ( )이 있는 몇 개의 기호가 숨겨져 있습니다.이 NS_REFINED_FOR_SWIFT
속성을 사용하여 Swift로 가져온 (Obj) C 기호가 있습니다. Apple은 (Obj) C API의 "더 간결한"버전을 만들고 싶을 때이를 사용합니다 (예 : 유형에 구애받지 않는 방법을 일반 방법으로 만들기) . 세련된 Swift 버전을 작동 시키려면 가져온 API를 사용해야하므로 __
대부분의 도구와 문서에서 API를 숨기고 사용할 수 있도록합니다.