35

JSON をオブジェクトに解析したいのですが、次のようになっているため、AnyObject を String または Int にキャストする方法がわかりません。

0x106bf1d07:  leaq   0x33130(%rip), %rax       ; "Swift dynamic cast failure"

たとえば、次のように使用します。

self.id = reminderJSON["id"] as Int

ResponseParser クラスがあり、その中にあります (responseReminders は AFNetworking responseObject からの AnyObjects の配列です):

for reminder in responseReminders {
    let newReminder = Reminder(reminderJSON: reminder)
        ...
}

次に、Reminder クラスで次のように初期化します (リマインダーは AnyObject ですが、Dictionary(String, AnyObject) です):

var id: Int
var receiver: String

init(reminderJSON: AnyObject) {
    self.id = reminderJSON["id"] as Int
    self.receiver = reminderJSON["send_reminder_to"] as String
}

println(reminderJSON["id"])結果: オプション (3065522)

このような場合、AnyObject を String または Int にダウンキャストするにはどうすればよいですか?

//編集

いくつかの試行の後、私はこの解決策を思いついた:

if let id: AnyObject = reminderJSON["id"] { 
    self.id = Int(id as NSNumber) 
} 

Int および

if let tempReceiver: AnyObject = reminderJSON["send_reminder_to"] { 
    self.id = "\(tempReceiver)" 
} 

文字列用

4

4 に答える 4

5

reminderJSON["id"]を与えるAnyObject?ので、にキャストすることはできませんInt。最初にアンラップする必要があります。

行う

self.id = reminderJSON["id"]! as Int

idJSONに存在することが確実な場合。

if id: AnyObject = reminderJSON["id"] {
    self.id = id as Int
}

それ以外は

于 2014-08-22T14:48:01.720 に答える