2016-09-23 8 views
0

iOS 10のリリースでは、いくつかの問題が発生しているようです。主なものは、NSMutableDictionaryとNSMutableArrayの使用です。どちらも、もはやJSONの文字列を解析することができなくなり、代わりにプレiOS 10では期待どおりの値が設定されていました。私が見つけたこの周りの唯一の方法は、NSDictionaryとNSArrayをそれぞれ使用してから、initメソッドを使ってキャストし直すことです。例:iOS 10 NSMutableDictionaryとNSMutableArrayが以前と同じように動作しない

let json = "{ \"code\": \"abcde\", \"name\": \"JP Morgan\" }" 
json as! NSMutableDictionary // gives nil 
NSMutableDictionary(dictionary: json as! NSDictionary) // works :) 

let json = "[{ \"code\": \"abcde\", \"name\": \"JP Morgan\" }]" 
json as! NSMutableArray // gives nil 
NSMutableArray(array: json as! NSArray) // works :) 

私はその理由を知りたいですか?

そして、私は、これは、誰かが自分の問題を解決するのに役立ちます願っています...

答えて

2

財団種類NSMutableArray/NSMutableDictionaryはスウィフトの対応に関連していないと、文字通り作成スウィフトタイプから強要/ブリッジすることはできません。しかし、それは基本的に

あなたは、いくつかの低レベルCoreFoundationのAPIとの相互作用例えば絶対に選択肢がない場合を除きスウィフトではない使用NSMutableArray/NSMutableDictionaryを行うスウィフト3に新しいものではないのです。ネイティブ/Dictionaryタイプはvarで使用され、同じ機能(値と参照のセマンティクスを除く)と、それに含まれるオブジェクトのタイプを提供します。

+0

ありがとうございます。私は他の誰かのコードで作業していますし、ObjCのものよりも "ネイティブ"タイプを使用することを知っていますが、それは実際の悪い考えであるとは知らなかった...あなたはSwift3には新しくないと言っています - どうすればiOS 10? (iOSは必ずしもSwift3を意味するわけではないが、それは問題が始まったときである) –

+0

実際にはSwift 2で(最初のリリースSwiftでも)Swiftコレクションタイプを**変更可能な** Foundation対応アイテムにキャストすることはできません。 – vadian

+0

NSMutablexxxのネイティブバージョンへの移行が安全であると思いますか? 「すべてを置換する」タイプのアプローチのように。明らかにここやそこにバグを修正しますが、一般的な機能はありますか? –

関連する問題