2016-09-29 12 views
2

Swift 3のDataからproperty listを読み込もうとしていますが、それはできません。Swift 3のデータからプロパティリストを読み取るにはどうすればいいですか

私はこのような何かしようとしたんだ:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [PropertyListSerialization.ReadOptions], format: nil) as! Dictionary 

を、私はこのエラーを得た:私はスウィフト1.2上で実行するために使用されるように

Cannot convert value of type 'PropertyListSerialization.ReadOptions.Type' (aka 'PropertyListSerialization.MutabilityOptions.Type') to expected element type 'PropertyListSerialization.MutabilityOptions'

は、それから私はこのような何かを試してみました:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [PropertyListSerialization.MutabilityOptions.immutable], format: nil) as! Dictionary 

このエラーが発生しました:

'immutable' is unavailable: use [] to construct an empty option set

は、その後、私はこの試みた:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [], format: nil) as! Dictionary 

をし、私はこのエラーを得た:

私はスウィフト3のデータ `から property listファイルを読み込むか、行う方法が何であるかはどうすればよい

'[Any]' is not convertible to 'PropertyListSerialization.ReadOptions' (aka 'PropertyListSerialization.MutabilityOptions')

それ?

+0

オプション値は本当に配列であるはずですか? –

+0

@PhillipMillsこの場合、配列ではなく空の 'OptionSet'です。 – vadian

答えて

5

Dictionaryは、キーと値のタイプ情報が必要な汎用タイプです。

使用Dictionary<String,Any>または短い[String:Any]

let datasourceDictionary = try! PropertyListSerialization.propertyList(from:data!, options: [], format: nil) as! [String:Any] 
4
  1. スウィフトの使用で[文字列:任意]通常。 valueには "nil"型を追加します。関数が返す "プロパティリストオブジェクト":
  2. あなたはオプションを設定する必要があります "[]"

    let pathStr = Bundle.main.path(forResource: "Info", ofType: "plist") 
    let data :NSData? = NSData(contentsOfFile: pathStr!) 
    let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data as! Data, options: [], format: nil) as! [String:Any] 
    print(datasourceDictionary.self) 
    

enter image description here

0

ドキュメントは.propertyList(...から)と述べています。また、 "プロパティリストオブジェクトには、NSData、NSString、NSArray、NSDictionary、NSDate、およびNSNumberオブジェクトが含まれています"と記載されています。したがって、あなたの3番目の試みは最も近いです。あなただけのNSDictionaryのに戻り値をキャストする必要があります。

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [], format: nil) as! NSDictionary 

[文字列:任意]にキャストの受け入れ答えは確かにあまりにも動作しますが、場合には、誰かがルートオブジェクトのプロパティリストでこの質問時につまずきます(自分のような)配列であれば、NSArrayやNSDictionaryのようにNS_somethingに結果をキャストする必要があることを知っておくと良いです。

関連する問題