2016-04-12 8 views
0

私はいくつかの検索を行いましたが、まだエラーを解決する方法を見つけることができません。 基本的に私はJsonファイルからブックリストを読んで、それを更新しています。読み込み部分は正常ですが、更新しようとするとエラー(「タイプが「AnyObject ?!」の不変式に代入できません」)が発生します。タイプ 'AnyObject ?!'の不変式に割り当てることはできません。

var url = NSBundle.mainBundle().URLForResource("Book", withExtension: "json") 

var data = NSData(contentsOfURL: url!) 

var booklist = try! NSJSONSerialization.JSONObjectWithData(data!, options: []) as! NSMutableArray 


for boo in booklist { 
      if (boo["name"] as! String) == "BookB" { 
       print (boo["isRead"]) //see Console Output 
       boo["isRead"] = "true" //this gets error "Cannot assign to immutable expression of type ' AnyObject?!'" 
      } 

Book.jsonは以下の通りであるJSONファイル:

[ 
{"name":"BookA","auth":"AAA","isRead":"false",}, 
{"name":"BookB","auth":"BBB","isRead":"false",}, 
{"name":"BookC","auth":"CCC","isRead":"false",}, 
] 

ブックリスト、値、コンソール出力を参照して期待している:

(
     { 
     name = BookA; 
     auth = AAA; 
     isRead = false; 
    }, 
     { 
     name = BookB; 
     auth = BBB; 
     isRead = false; 
    }, 
     { 
     name = BookC; 
     auth = CCC; 
     isRead = false; 
    } 
) 

print (boo["isRead"])ため、コンソール結果はOptional(false)です、 どちらが正しい。

ブックリストはすでにNSMutableArrayのである、と私はまた

var booklist = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSMutableArray 

として変更しようとしましたが、それは解決しません。

var mutableObjects = booklist 
for var boo in mutableObjects { 
      if (boo["name"] as! String) == "BookB" { 
       print (boo["isRead"]) //see Console Output 
       boo["isRead"] = "true" //this gets error "Cannot assign to immutable expression of type ' AnyObject?!'" 
      } 

誰もが、この場合にBookBためのブックリストにisReadを更新する方法を助言でした:

もまた同じエラーが出るの下に変更し、Swift: Cannot assign to immutable expression of type 'AnyObject?!'に言及しました。または、Book.jsonファイルの更新方法をさらに改善できます。

ありがとうございます。あなたのケースでは

+0

可能な複製とbooのタイプに関するヒント与える[スウィフト:タイプの不変式に割り当てることができません「ANYOBJECT ?!」](http://stackoverflow.com/質問/ 32093692 /即時に割り当てられない不変式の任意の式の任意の式) – Lasse

+0

その問題の解決策は私のためには機能しません... – Adaoli

+0

あなたは正しいです。私は働く答え – Lasse

答えて

0

あなたは二回このエラーを打つ:

コンパイラは booの種類を知らないので、あなたが正しく
  • を編集した(それはNSMutableArrayだけの要素だforループ、中
    1. 。この問題を解決するには

    に書くことができ

    for var boo in mutableObjects { 
        if var theBoo = boo as? NSMutableDictionary { 
         if (theBoo["name"] as! String) == "BookB" { 
          print (theBoo["isRead"]) //see Console Output 
          theBoo["isRead"] = "true" //this gets error "Cannot assign to immutable expression of type ' AnyObject?!'" 
         } 
        } 
    } 
    

    または、コンパイラにの

    guard let theBoos = mutableObjects as? [Dictionary<String, AnyObject>] else { 
         return 
        } 
    
        for var theBoo in theBoos { 
         if (theBoo["name"] as! String) == "BookB" { 
          print (theBoo["isRead"]) //see Console Output 
          theBoo["isRead"] = "true" //this gets error "Cannot assign to immutable expression of type ' AnyObject?!'" 
         } 
        } 
    
  • +0

    ありがとう!それは完璧に動作します。 – Adaoli

    関連する問題