これは PFQueryTableViewController を拡張するクラス内にあり、次のエラーが表示されます。行はPFUser
のみです。
なぜキャストできないのですか?これを回避する方法はありますか?
エラーは次のとおりです。
Cannot subscript a value of [AnyObject]? with an index of type Int
...この行の場合:
var user2 = self.objects[indexPath.row] as! PFUser
問題はキャストではなく、self.objects
はオプションの配列のようです:[AnyObject]?
。
したがって、添え字を介してその値の1つにアクセスする場合は、最初に配列のラップを解除する必要があります。
var user2: PFUser
if let userObject = self.objects?[indexPath.row] {
user2 = userObject as! PFUser
} else {
// Handle the case of `self.objects` being `nil`.
}
表現 self.objects?[indexPath.row]
は、最初に展開するために オプションの連鎖 を使用しますself.objects
を選択し、その添え字を呼び出します。
Swift 2の時点で、 guard statement を使用することもできます。
var user2: PFUser
guard let userObject = self.objects?[indexPath.row] else {
// Handle the case of `self.objects` being `nil` and exit the current scope.
}
user2 = userObject as! PFUser
同じ問題にぶつかり、次のように解決しました。
let scope : String = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex] as! String
あなたの場合、あなたはそうするかもしれません:
var user2 : PFUser = self.objects![indexPath.row] as! PFUser
私の回避策は….
追加するだけです! (感嘆符)オブジェクトの後に、次のように:
var user2 = self.objects![indexPath.row] as! PFUser
それは私のためにそれを修正しました:)
私は次の行で同様の問題がありました:
array![row]
問題がどこから来たのか理解できませんでした。 row
を1
のような番号に置き換えた場合、コードは問題なくコンパイルされ実行されました。
それから私はこれをこれに変更する幸せな考えを持っていた:
array![Int(row)]
そしてそれは働いた。私の人生では、配列に-1
のインデックスを与えることが理論的に合法である理由を理解していませんが、そこに行きます。下付き文字に署名がないことは私にとって理にかなっていますが、たぶんそれは私だけです。私は Chris について尋ねなければなりません。