swift nil エラー解決事例
ここでエラー
if let first = results.first { let maxId = (first as AnyObject).value(forKeyPath: desc.name) as! Int64
コンソールで
po (first as AnyObject).value(forKeyPath: desc.name) ですると nil が返却される po first でも o elements po result では 1 elements - 0: 0 elemtnts
どういうこと? どうやら辞書型のインスタンスはあるけど、中身は空っぽらしい
result は辞書型 結局ここは何をしているかというと
if let first = results.first { //maxidをgetして Int64に型変換 let maxId = (first as AnyObject).value(forKeyPath: desc.name) as! Int64 print("newId = \(maxId+1)") return maxId + 1 } else { //初期値が無いなら1を返却 return 1 }
という処理をしている
else文が実行されていない ifの条件文で、falseが返却されていない
解決策
firstを辞書型に型変換して、そのcountが0ならそれは falseが返却されるはず つまりelseが実行される
//条件は2つ 1-results.first がtrue 2- (first as! Dictionary<String,AnyObject>).count > 0がtrue //firstを辞書型へ型変換、その数が0なら空である。その場合は else文が実行される if let first = results.first , (first as! Dictionary<String,AnyObject>).count > 0 {
ジェネリクスの定義方法
//<に型を複数指定する場合は `,` で区切る func 関数名<String,AnyObject> -> 戻り値の型{ 処理 }
以上で解決 めでたし めでたし