2017-02-21 1 views
-2

Xcode 8.2.1을 사용하고 있습니다.왜 Array.max를이 방법으로 호출 할 수 있습니까?

public func max(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?

인수 레이블 by과 인수 이름은 areInIncreasingOrder입니다 : 내가 배열에 대한 설명서를 보면 나는 max 방법이 선언을 찾을 수 있습니다. 레이블은 명시 적으로 지정되었으므로 함수 호출에 포함되어야한다고 생각했지만 레이블을 생략하면 다음 코드가 작동합니다 (예 : by).

메소드를 호출 할 때 인수 레이블을 사용하는 방법에 대해 오해하고 있습니까? 또는 예제 코드가 max 메서드의 다른 버전을 호출합니까?

예제 코드 :

let names = ["Talyor", "Paul", "Adele"] 

let longest = names.max { $1.characters.count > $0.characters.count } 
print(longest!) // "Taylor 
+2

그리고'names.max (by : {$ 1.characters.count> $ 0.characters.count})'는 예상대로 컴파일되지 않습니다. 당신이 사용한 것은 "후행 폐쇄 구문"입니다. –

+1

[Trailing Closure] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID102) 섹션을 참조하십시오. "The Swift Programming Language"책. – rmaddy

답변

1

방법의 마지막 매개 변수가 폐쇄, 당신은 메소드 호출 후 괄호를 작성하고 매개 변수의 이름을 생략 할 수 있습니다.

Trailing Closure documentation을 참조하십시오.

관련 문제