web-dev-qa-db-ja.com

[AnyObject]の値に添え字を付けることはできませんか? Int型のインデックス付き

これは PFQueryTableViewController を拡張するクラス内にあり、次のエラーが表示されます。行はPFUserのみです。
なぜキャストできないのですか?これを回避する方法はありますか?

エラーは次のとおりです。

Cannot subscript a value of [AnyObject]? with an index of type Int

...この行の場合:

var user2 = self.objects[indexPath.row] as! PFUser

enter image description here

25
user1406716

問題はキャストではなく、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
61
Marcus Rossel

同じ問題にぶつかり、次のように解決しました。

let scope : String = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex] as! String

あなたの場合、あなたはそうするかもしれません:

var user2 : PFUser = self.objects![indexPath.row] as! PFUser
6
rudenudedude

私の回避策は….

  1. テーブルビューにユーザーのみが含まれることが確実な場合は、AnyObjectのオブジェクト配列をPFUserの配列に型キャストしようとします。それを使用します。
3
Amit89

追加するだけです! (感嘆符)オブジェクトの後に、次のように:

var user2 = self.objects![indexPath.row] as! PFUser

それは私のためにそれを修正しました:)

1
ojassethi

私は次の行で同様の問題がありました:

array![row]

問題がどこから来たのか理解できませんでした。 row1のような番号に置き換えた場合、コードは問題なくコンパイルされ実行されました。

それから私はこれをこれに変更する幸せな考えを持っていた:

array![Int(row)]

そしてそれは働いた。私の人生では、配列に-1のインデックスを与えることが理論的に合法である理由を理解していませんが、そこに行きます。下付き文字に署名がないことは私にとって理にかなっていますが、たぶんそれは私だけです。私は Chris について尋ねなければなりません。

0
dinesharjani