2016-07-27 4 views
0

私は以下のクラスを持っていますが、関数一致を使ってSongTitleESongTitleの両方の文字列を検索しています。クラス外の関数の使い方

class KeerthanaiArray: NSObject { 
var SongTitle: String = String() 
var SongLyrics: String = String() 
var ESongTitle: String = String() 

init(SongTitle: String, SongLyrics:String, ESongTitle: String) { 
    self.SongTitle = SongTitle 
    self.SongLyrics = SongLyrics 
    self.ESongTitle = ESongTitle 
} 

func match(string:String) -> Bool { 
    return SongTitle.containsString(string) || ESongTitle.containsString(string) 
} 
} 

私は、そのクラスの外で機能の試合を使用することができませんでしたので、私は以下のロジック使用してみました:

for keerthanaiArrayObject in keerthanaiArray { 
     let searchr = (keerthanaiArrayObject.match(searchText.lowercaseString))} 

しかし、今、私はそのループのためのsearchr外を参照してくださいすることができませんが。これらの機能を参考にしてください。

答えて

0

代わりにsearchrをvarに変更できますか?で定義されているように、forループの外側で定義し、forループの中でそれを再割り当てします。また

var searchr: Bool? 

for keerthanaiArrayObject in keerthanaiArray { 
    searchr = (keerthanaiArrayObject.match(searchText.lowercaseString))  
} 

、サイドノート:あなたのKeerthanaiArrayの名前が誤解を招くおそれがあり、このような

何か。オブジェクトは配列ではなく単一項目でなければなりません。名前をKeerthanaiに変更することをお勧めします。次にKeerthanaiオブジェクトのリストが必要な場合は、それらを配列でラップすることができます。

このようにします。

var keerthanaiArray = [keerthanaiObject1, keerthanaiObject2, keerthanaiObject3] 
+0

私がBoolとして検索エンジンを宣言すると、私の次のコードは機能しません。私は以下のコードを持っています。self.searchResults = searchr.filter({(searchr) - > Bool in – Jebus

+0

これで、 'Bool?'というエラーメッセージの値が返されます。 'filter'というメンバはありません – Jebus

+0

あなたのコードは待ちません意味をなさない あなたのマッチ機能を使用すると、この行でsearchr' 'に割り当てるブール値権を返します。? 'てみましょうsearchr =(keerthanaiArrayObject.match(searchText.lowercaseString)) ' だから、' searcher'がですタイプBoolとフィルタは、配列やマップ上でのみbool値には使用できません。 –

関連する問題