Ich habe aus versucht, verschiedene Versionen Ihres Codes (mit Xcode 7). Die Lösung ist offensichtlich,
let closestStationAnnotations = closestAnnotations.filter({
$0 is StationAnnotation
})
verwendet, die die richtige Art und Weise ist Typen zu testen, funktioniert ohne Probleme.
habe ich bemerkt, dass es einfacher Code, der Fehler weg jedoch
let closestStationAnnotations = closestAnnotations.filter({
print("\($0)")
return ($0.dynamicType === StationAnnotation.self)
})
gehen macht, das nicht funktioniert:
let closestStationAnnotations = closestAnnotations.filter({
return ($0.dynamicType === StationAnnotation.self)
})
Wenn Sie die Fehlermeldung fest, sieht der Compiler der Verschluss als (_) -> Bool
. Das führt mich zu der Schlussfolgerung, dass der Ausdruck $0.dynamicType
irgendwie optimiert ist.
Interessanter
let closestStationAnnotations = closestAnnotations.filter({
return true
})
den gleichen Fehler auslösen.
Also ich denke, es gibt zwei Compiler-Fehler:
Der Compiler nicht das Argument vom Typ des Arrays entnehmen kann, und das ist falsch, weil (_) -> Bool
sollte als (Type) -> Bool
in Betracht gezogen werden, wenn sie auf [Type]
genannt.
Der Compiler optimiert irgendwie $0.dynamicType
aus und das ist offensichtlich falsch.
Wie wird 'engsteAnnotationen' deklariert? – Sulthan
Bitte sehe meine Bearbeitung! :) –
Riecht wie ein Käfer. Ich denke, es hängt damit zusammen, dass '.dynamicType' kein [normaler Mitgliederzugriff] ist (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/doc/uid/TP40014097-CH32-ID400), aber [ein spezieller Ausdruck] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/doc/uid/TP40014097-CH32-ID402). Aber ich kann keine vernünftige Erklärung dafür finden. – rintaro