2014-07-16 12 views
5

Seit Xcode Beta 3 können wir [int] als kurze Hand für Array<Int> schreiben.Neue Swift-Array-Syntax und generische Funktion

Also sollten wir schreiben:

func commonElements <T, U where T: Sequence, U: Sequence, 
    T.GeneratorType.Element: Equatable, 
    T.GeneratorType.Element == U.GeneratorType.Element> 
    (lhs: T, rhs: U) -> [T.GeneratorType.Element] { 
     var result = [T.GeneratorType.Element]() 
     for lhsItem in lhs { 
      for rhsItem in rhs { 
       if lhsItem == rhsItem { 
        result += rhsItem 
       } 
      } 
     } 
     return result 
} 
commonElements([1, 2, 3, 4], [2, 4, 6]) 

Aus einem Grund Ich verstehe nicht, Xcode nicht akzeptiert die kurze Syntax result Array zu initialisieren, aber seine lange gleichwertig Array<T.GeneratorType.Element>() akzeptieren.

Fehle ich etwas?

Antwort

3

Vielleicht wird der Compiler verwirrt. Dies funktioniert aber

var result: [T.GeneratorType.Element] = [] 

und ist besser IMO.

+0

Ich denke, es ist ein Compiler-Bug, die nächste Xcode-Beta kann es lösen. (NB: [Type]() ist die Syntax, die Apple in seinem Swift-Dokument verwendet, um ein leeres Array zu deklarieren.) – clmntcrl

+0

@clmntcrl Apple verwendet beide Notationen '[]()' erscheint 12 Mal in * The Swift Programming Language * and '[] 'erscheint 7 mal. – JeremyP