Skip to content

Instantly share code, notes, and snippets.

@krzyzanowskim
Created June 11, 2019 21:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krzyzanowskim/2746f2fa4b816b19f38196d27b741994 to your computer and use it in GitHub Desktop.
Save krzyzanowskim/2746f2fa4b816b19f38196d27b741994 to your computer and use it in GitHub Desktop.
throwing closure parameter results in different resolution
class A {}
// foo
func foo<T>(_ v: T, handler: () -> Void) -> T {
print("regular")
return v
}
func foo<T>(_ v: T?, handler: () throws -> Void) rethrows -> T? {
print("optional")
return v
}
// bar
func bar<T>(_ v: T, handler: () -> Void) -> T {
print("regular")
return v
}
func bar<T>(_ v: T?, handler: () -> Void) -> T? {
print("optional")
return v
}
let result1: A? = foo(A(), handler: {}) // error: ambiguous use of 'foo(_:handler:)'
let result2: A? = bar(A(), handler: {}) // ok, "optional"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment