title: When are argument labels required in Swift?
body: <p>In answering <a href="https://stackoverflow.com/questions/24815665/simple-swift-generics-puzzle">this question</a> it came about that argument labels were required for a call to <code>init</code>. This is normal in Swift.</p>
  
  <pre><code>class Foo {
      init(one: Int, two: String) { }
  }
  
  let foo = Foo(42, "Hello world") // Missing argument labels 'one:two:' in call
  </code></pre>
  
  <p>However, stranger forces are at play:</p>
  
  <pre><code>extension Foo {
      func run(one: String, two: [Int]) { }
  }
  
  foo.run(one: "Goodbye", two: []) // Extraneous argument label 'one:' in call
  </code></pre>
  
  <p>To use an argument label here it would have to be declared explicitly.</p>
  
  <p>I haven't seen something very thorough explaining all of this in the documentation. For which varieties of class/instance/global functions are argument labels required? Are Obj-C methods always exported and imported with argument labels?</p>