nicht unsafeBitCast zwischen verschiedenen Arten in verschiedenen Größen in swift
wenn ich versuche zu finden, Duplikate in array, erhalte ich die Fehlermeldung "kann nicht unsafeBitCast zwischen verschiedenen Arten in verschiedenen Größen". Ich finde die Duplikate folgende Methode.
func uniq<S : SequenceType, T : Hashable where S.Generator.Element == T>(source: S) -> [T] {
var buffer = [T]()
var added = Set<T>()
for elem in source {
if !added.contains(elem) {
buffer.append(elem)
added.insert(elem)
}
}
return buffer
}
func filter() {
var arrayForSearch = mp3Files as! [String]
var filteredArray = uniq(arrayForSearch)
println("filtered array \(filteredArray)")
}
Die Methode der Duplikate suchen ich wusste, dass Sie auf diesen link,geben Sie den link-Beschreibung hier. Ich benutze Xcode 6 und Swift 1.2
Gibt es die Reihe in der dieser code.
var mp3Files: Array<String!>!
func exportData() {
var generalURL: [AnyObject]?
var arrayFiles: Array<NSURL!>!
var directory = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
var urlFromDirectory = directory.first as! NSURL
var file = fileManager.contentsOfDirectoryAtURL(urlFromDirectory, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles, error: nil)!
println("file \(file)")
mp3Files = file.map(){ $0.lastPathComponent }.filter(){ $0.pathExtension == "mp3" }
println("mp3 files \(mp3Files)")
}
Als ich schrieb diesen code in playground, es funktioniert.
Ein Beispiel
var array = ["Apple", "Mac", "iPhone", "iPad Air", "Apple", "Air", "Air"]
var filteredArray = Array(Set(array))
println(filteredArray)
Wie kann ich es in meinem Projekt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wow, das ist eine Menge Ausrufezeichen.... Sie sind nicht erforderlich.
Und die Art der
mp3Files
kann nie die gleiche sein, wie[String]
, so kann man nicht erzwingen-Darsteller zwischen Ihnen (und würde Abstürzen, wenn Sie Sie lassen).Du verwendest implizit unwrapped optionals viel zu oft. Sie sind nur in einigen speziellen Fällen. Ändern Sie einfach
mp3Files
zu[String]
(in welchem Fall Sie nicht brauchen, dieas!
; Sie sollte nicht müssenas!
sehr oft).Ebenso
arrayFiles
(die Sie nie verwenden), sollte nur[NSURL]
, nichtArray<NSURL!>!
.Ich hier versuchen, die gleiche code wie angegeben:
Sowie
OutPut
in der Konsole:Meine es ist ein problem, wenn Sie Gießen Sie Ihre array
[String]
so überprüfen Sie es erneut.[String]
mp3Files
wenn Sie deklarieren?