MagicalRecordのWhere文を作るとき、isEmptyが予想してた動きをしてくれなかったのでやったことまとめます。
nilを考慮しないWhere生成処理
Where文で利用できるようにTitleとAuthをAndで連結させるメソッドです。
func getWhere(strTitle:String,strAuth:String) -> String{
var whereList:[String] = []
if(!strTitle.isEmpty){whereList.append("title = '" + strTitle + "'")}
if(!strAuth.isEmpty){whereList.append("auth = '" + strAuth + "'")}
return join(" AND ", whereList)
}
OKパターン
func getWhereTest(){
println(self.getWhere("TitleTest", strAuth: "AuthTest"))
// 結果:title = 'TitleTest' AND auth = 'AuthTest'
println(self.getWhere("TitleTest", strAuth: ""))
// 結果:title = 'TitleTest'
println(self.getWhere("", strAuth: ""))
// 結果:<なし>
}
NGパターン
引数がOptionalではないためコンパイルエラーになる。
func getWhereTest(){
println(self.getWhere(nil, strAuth: ""))
}
nil許可させたい
単純に以下のように引数をOptionalにした場合、isEmptyが使えなくて困る。
func getWhere2(strTitle:String?,strAuth:String?) -> String{
nilも空文字も渡されることを想定したisEmpty相当の判定メソッドを用意してあげる。
(結局こういうの用意しないとダメなのかね。。。)
func strEmpty(strText:String?) -> Bool{
if(strText == nil){
return true
}else{
if(strText! == ""){
return true
}
}
return false
}
nilを考慮したWhere生成処理
func getWhere(strTitle:String?,strAuth:String?) -> String{
var whereList:[String] = []
if(!commonUtils.strEmpty(strTitle)){whereList.append("title = '" + strTitle! + "'")}
if(!commonUtils.strEmpty(strAuth)){whereList.append("auth = '" + strAuth! + "'")}
return join(" AND ", whereList)
}
引数に空文字を入れたパターンと、nilを入れたパターンを試してみる。
func getWhereTest(){
println(self.getWhere("TitleTest", strAuth: "AuthTest"))
// 結果:title = 'TitleTest' AND auth = 'AuthTest'
println(self.getWhere("TitleTest", strAuth: ""))
// 結果:title = 'TitleTest'
println(self.getWhere("TitleTest", strAuth: nil))
// 結果:title = 'TitleTest'
}
ほんとOptionalで突然ウワってなるな。。。。