web-dev-qa-db-ja.com

[String:AnyObject]から無関係なタイプNSMutableDictionaryへのキャストは常に失敗します警告

コードは機能していますが、毎回表示され続けるこの警告をサイレントにするにはどうすればよいですか?

let parentView = self.parentViewController as! SBProfileViewController
parentView.savedDetailsModel = SBSavedUserModel(data:responseObject["data"].dictionaryObject! as! NSMutableDictionary)

'[String:AnyObject]'から無関係なタイプ 'NSMutableDictionary'へのキャストは常に失敗します警告

SavedUserModelは保存された情報を保存します:-

class SBSavedUserModel : NSObject { 
var userId : String!
var firstName : String!
var lastName : String!
var imageBase64 : String!

required init ( data : NSMutableDictionary) {
    self.userId =  data.objectForKey("userId") as! String
    self.firstName = data.objectForKey("fName") as! String
    self.lastName = data.objectForKey("lName") as! String
    self.imageBase64 = data.objectForKey("image") as! String
}
8
Jitendra

交換してみてください

_responseObject["data"].dictionaryObject! as! NSMutableDictionary_

これとともに:

NSMutableDictionary(dictionary: responseObject["data"].dictionaryObject!)

簡単にNSDictionaryにキャストできますが、何らかの理由でNSMutableDictionaryが必要な場合は、NSMutableDictionary(dictionary:)で新しいものを初期化する必要があります。

編集:これが必要な理由については、@ Tommyによるこの質問へのコメントを参照してください。

4
Addison

NSArrayおよびNSDictionaryとは異なり、可変のFoundationコレクションタイプNSMutableArrayおよびNSMutableDictionaryは、対応するSwiftにブリッジされません。

最も簡単な解決策は、Swiftネイティブタイプを使い続けることです

let parentView = self.parentViewController as! SBProfileViewController
parentView.savedDetailsModel = SBSavedUserModel(data:responseObject["data"].dictionaryObject!)

...

class SBSavedUserModel : NSObject { 
var userId, firstName, lastName, imageBase64 : String

  required init ( data : [String:AnyObject]) {
    self.userId = data["userId"] as! String
    self.firstName = data["fName"] as! String
    self.lastName = data["lName"] as! String
    self.imageBase64 = data["image"] as! String
  }
}

または–辞書の値が文字列の場合はさらに便利ですall

parentView.savedDetailsModel = SBSavedUserModel(data:responseObject["data"].dictionaryObject as! [String:String])

...

required init ( data : [String:String]) {
    self.userId = data["userId"]!
    self.firstName = data["fName"]!
    self.lastName = data["lName"]!
    self.imageBase64 = data["image"]!
}
2
vadian