2016-07-14 66 views
0

一個火力地堡數據庫創建一個過濾的實現代碼如下的最佳方式我有一個顯示歌曲的標題的實現代碼如下,從包含以下結構的火力地堡數據庫拉:請告訴我使用斯威夫特

{ 
    "songs" : { 
    "key1" : { 
     "lyrics" : "...", 
     "title" : "...", 
     "video" : "..." 
    } 
    } 
} 

如果我添加該火力點數據的一類叫做宋話,我想我可以做到這一點:

var songs = [Song]() 
var filteredSongs = [Song]() 

let lower = searchBar.text!.lowercaseString 
filteredSongs = songs.filter({$0.title.rangeOfString(lower) != nil}) 

但是,我沒有做成功,繼這解決了這個問題之後的例子:convert FIRDataSnapshot to custom type

class Song: NSObject { 
var title: String 
var lyrics: String 
var videoUrl: String 
let ref: FIRDatabaseReference? 

init(title: String, lyrics: String, videoUrl: String) { 
    self.title = title 
    self.lyrics = lyrics 
    self.videoUrl = videoUrl 
    self.ref = nil 
} 

init(snapshot: FIRDataSnapshot) { 
    title = snapshot.value!["title"] as! String 
    lyrics = snapshot.value!["lyrics"] as! String 
    videoUrl = snapshot.value!["video"] as! String 
    ref = snapshot.ref 
} 

convenience override init() { 
    self.init(title: "", lyrics: "", videoUrl: "") 
} 
} 

有沒有添加過濾器而不創建類的方法?

+0

將'filter'應用於'songs'數組後,是否有任何錯誤? – triandicAnt

+0

在哪裏以及如何聲明'lower' var?和你分享'Song'課程。 – Igor

+0

@Igor我剛更新了這個問題,添加了'lower' –

回答

0

最好將您的JSON轉換爲模型圖層中的結構體/類,以便於在控制器層中使用。

除非,你可以這樣做:

json.value!["songs"].filter{ ($0.value!["title"] as! String).rangeOfString(lower) != nil} 

正如你可以看到,它的醜陋。不要這樣做。

0

你在代碼的另一部分有問題,比你分享。

放一個斷點並逐行執行代碼。你找到一條線,它會拋出異常。如果有問題,請分享這行代碼。