스위프트 레퍼런스의 _ 밑줄 대표자는 무엇입니까?
Apple 문서의 참조 섹션에는 이런 종류의 사례가 많이 있습니다.
func runAction(_
action
: SKAction!)
이에 대한 목표-C '동등'은 다음과 같습니다.
- (void)runAction:(SKAction *)
action
(스위프트 참조에서) 밑줄 뒤에 공백이 있고 "action"이 기울임꼴로 쓰여지는 것이 아마도 중요할 것 같습니다.
하지만 저는 이것이 무엇을 전달하려고 하는지 이해할 수 없습니다.그래서 아마 질문은...참고문헌에 사용된 규약에 대한 참고문헌이 있습니까?
이 밑줄 사용에 대해 참조하고 있는 페이지는 다음과 같습니다. https://developer.apple.com/documentation/spritekit/sknode #//apple_ref/occ/instm/SKNode/runAction
갱신하다
Swift 3은 함수/메소드 매개 변수 이름 및 인수 레이블을 사용하고 이름을 지정하는 방법을 일부 변경했습니다.이것은 이 질문과 그 대답에 영향을 미칩니다.@Rickster는 이 문제의 대부분을 해결하는 함수에서 언더스코어에 대한 다른 질문에 대해 놀라운 답변을 합니다.왜 빨리 밑줄이 필요합니까?
두 답변 모두 맞았지만 조금 더 명확히 하고 싶습니다.
_
메서드에 대한 외부 매개 변수 이름 동작을 수정하는 데 사용됩니다.
설명서의 방법에 대한 로컬 및 외부 매개 변수 이름 섹션에는 다음과 같이 나와 있습니다.
Swift는 메서드의 첫 번째 매개 변수 이름에 기본적으로 로컬 매개 변수 이름을 지정하고, 두 번째 및 후속 매개 변수 이름에 기본적으로 로컬 및 외부 매개 변수 이름을 지정합니다.
그러나 기본적으로 함수에는 외부 매개 변수 이름이 없습니다.
예를 들어, 우리는 이것을 가지고 있습니다.foo()
클래스에 은 다음과 .Bar
:
class Bar{
func foo(s1: String, s2: String) -> String {
return s1 + s2;
}
}
에 전화할 때.foo()
은 라고불다니립처럼 불립니다.bar.foo("Hello", s2: "World")
.
그러나 다음을 사용하여 이 동작을 재정의할 수 있습니다._
s2
그것이 선언된 곳.
func foo(s1: String, _ s2: String) -> String{
return s1 + s2;
}
그럼을 부를 때 당이전화할때신때할▁then전화,이▁you▁when.foo
단순히 다음과 같이 부를 수 있습니다.bar.foo("Hello", "World")
두 번째 매개 변수의 이름 없이.
당신의 경우로 돌아가서,runAction
유형과 연관되어 있기 때문에 메소드입니다.SKNode
론물. 뻔지. 하지. 라서를 , 는을 붙입니다._
변수 매변 수에앞 action
를 걸 수 있습니다.runAction
외명 없이
Swift 2.0용 업데이트
함수와 메서드는 이제 로컬 및 외부 인수 이름 선언 측면에서 동일한 방식으로 작동합니다.
이제 함수는 기본적으로 외부 매개 변수 이름을 사용하여 두 번째 매개 변수부터 호출됩니다.이 규칙은 순수 Swift 코드에만 적용됩니다.
따라서, 다음을 제공함으로써._
함수 앞에서는 메서드에 대해 수행하는 작업처럼 호출자가 외부 매개 변수 이름을 지정할 필요가 없습니다.
밑줄은 삭제된 값을 나타내는 데 사용되는 일반 토큰입니다.
이 특정한 경우에, 이 기능은 다음과 같이 호출된다는 것을 의미합니다.runAction(argument)
에 runAction(action:argument)
다른 맥락에서는 다음과 같은 다른 유사한 의미를 가집니다.
for _ in 0..<5 { ... }
즉, 블록을 5번만 실행하고 블록 내 인덱스는 상관하지 않습니다.
이러한 맥락에서:
let (result, _) = someFunctionThatReturnsATuple()
즉, 우리는 튜플의 두 번째 요소가 무엇이든 상관하지 않고 오직 첫 번째 요소만 신경 쓴다는 것입니다.
Swift 3부터는 기본적으로 모든 인수 레이블이 필요합니다.
가 IDE의 할 수 ._
.
func foo(a: String) {
}
func foo2(_ a: String) {
}
라고 하는foo(a: "abc")
그리고.foo2("abc")
참고: 이 기능은 다음과 같은 경우에만 사용할 수 있습니다.
a
(외부) 인수 레이블과 (내부) 변수 이름을 동시에 나타냅니다.이것은 동등합니다.func foo(a a: String)
받아들이지 않을 것입니다._
.
애플은 왜 그것을 사용합니까?
애플이 API를 통해 사용하고 있는 것을 볼 수 있습니다.Apple의 라이브러리는 여전히 Objective-C로 작성됩니다(만약 그렇지 않다면 Objective-C 구문을 위해 설계된 동일한 함수 이름을 공유합니다).
기능은과 기능.applicationWillResignActive(_ application: UIApplication)
중복 매개 변수 이름을 사용합니다.application
함수 이름에 이미 응용 프로그램이 있기 때문입니다.
당신의 예
func runAction(_ action: SKAction!)
그것이 없으면 불리게 될 것입니다._
와 같은 표시를 하는.runAction(action:)
이름은 " " " 입니다.action
함수 이름에 이미 하나가 있으므로 중복됩니다.그것이 목적이고 그것이 왜 거기에 있는지입니다.
매개 변수 선언 앞의 식별자는 외부 매개 변수 이름을 정의합니다.이 이름은 함수를 호출할 때 호출자가 지정해야 하는 이름입니다.
func someFunction(externalParameterName localParameterName: Int)
사용자가 직접 외부 이름을 지정하지 않은 경우 Swift는 사용자가 정의한 기본 매개 변수에 대해 자동 외부 이름을 제공합니다.외부 매개 변수 이름에 밑줄을 사용하면 다음 동작에서 제외됩니다.
이 수 .
_
매개 변수를 정의할 때 명시적인 외부 이름 대신 사용합니다.
이 동작에 대한 자세한 내용은 기본값이 있는 매개 변수의 외부 이름 섹션을 참조하십시오.
저는 이것이 코코아 관례와 더 잘 일치하는 목적-c에 더 가깝게 읽게 하는 Swift의 관례를 강요한다고 생각합니다.objectc에서는 (외부적으로) 첫 번째 매개 변수의 이름을 지정하지 않습니다.대신 일반적으로 다음과 같이 메서드 이름의 뒷부분에 외부 이름을 포함합니다.
- (void)myFancyMethodWithFirstName:(NSString *)aFirstName lastName:(NSString *)aLastName;
[someInstance myFancyMethodWithFirstName:@"John" lastName:@"Doe"];
Swift api 호출이 objc와 일치하도록 하려면 첫 번째 매개 변수의 외부 매개 변수 이름을 표시하지 않습니다.
func myFancyMethodWithFirstName(_ firstName:String, lastName:String);
someInstance.myFancyMethodWithFirstName("John", lastName:"Doe")
실제로 애플 문서에서 메소드를 정의하는 데 사용되는 실제 코드와 메소드 선언에는 차이가 있습니다.UIControl의 - addTarget:action:forControlEvents: 메서드를 예로 들어, 실제 코드는 다음과 같습니다.
그러나 문서에서는 다음과 같이 나타납니다(대상 앞에 알림).
실제 코드에서 _는 메서드를 호출할 때 두 번째 이후 매개 변수의 외부 이름이 나타나지 않도록 하는 데 사용되는 반면, docs에서는 매개 변수의 로컬 이름 앞에 메서드나 함수를 호출할 때 외부 이름을 지정하면 안 됩니다.
사용자 자신의 이름을 제공하거나 매개 변수의 로컬 이름 앞에 #을(공백 없이) 추가하지 않는 한 기본적으로 함수를 호출할 때 외부 이름은 없습니다. 예를 들어, dispatch_after는 다음과 같이 사용합니다.
문서에서는 다음과 같이 표시됩니다(3번 알림_).
함수 선언의 규약은 제가 방법에 대해 설명한 것과 동일합니다.
좀 더 시각적으로.
보다시피_
로컬 매개 변수 이름을 생략할지 여부를 지정합니다.
언급URL : https://stackoverflow.com/questions/24437388/whats-the-underscore-representative-of-in-swift-references
'programing' 카테고리의 다른 글
Entity Framework 4.1 코드 먼저 클래스 속성 무시 (0) | 2023.05.24 |
---|---|
mongodb 없이 _id 문자열과 같은 mongodb를 만들 수 있는 방법이 있습니까? (0) | 2023.05.24 |
$lookup을 사용한 MongoDB 집계는 쿼리에서 반환할 일부 필드만 포함(또는 프로젝트)합니다. (0) | 2023.05.24 |
vba 코드 리팩터링 - 도움이 되는 도구가 있습니까? (0) | 2023.05.24 |
터미널에서 내 Git 사용자 이름을 변경하려면 어떻게 해야 합니까? (0) | 2023.05.14 |