[英]How can I read Plist in Swift?
我想讀一個NSArray表單plist,代碼:
func loadPlistArray() -> [Any] {
var path: String? = Bundle.main.path(forResource:"MyCenter", ofType: "plist")
if let arry = NSArray(contentsOfFile: path!) {
return arry as! NSArray
}else{
return nil;
}
}
但總是有以下錯誤:
我應該通過var plistArray在數組中添加泛型:[[String:Any]]?
您收到的錯誤消息告訴您方法有什么問題,這就是我編寫函數的方法:
func loadPlistArray() -> [Any] { // 1
guard
let url = Bundle.main.url(forResource: "MyCenter", withExtension: "plist"), // 2
let list = NSArray(contentsOf: url) as? [Any] // 3
else { return [] } // 4
return list
}
還有一些評論:
Any
項的Array
,但您的方法嘗試返回NSArray
。 [Any]
。 但是,如果您知道plist中的項目類型,我建議您從此方法返回正確類型的數組,例如[String]
, [Int]
等。 您的方法簽名清楚地表明它返回一個[Any]
(即包含任何類型元素的Swift本機Array
),同時您嘗試將返回值NSArray
轉換為NSArray
(即使它已經由於初始化: NSArray(contentsOfFile:)
)。
將其更改為:
return arry as? [Any]
// (will return nil if the cast fails - not a problem if you
// also apply the fix mentioned below...)
另一條路徑試圖返回nil
; 為了使其可接受,您的簽名需要定義為返回可選 :
func loadPlistArray() -> [Any] // WRONG
func loadPlistArray() -> [Any]? // RIGHT
編輯:如果你的應用程序的結構是這樣的,你不能從你的方法返回nil
,你可以在失敗時返回一個空數組:
else {
return [] // Empty array
}
(使用[:]
作為空字典)
另外,盡量避免使用!
只要有可能,切換到?
相反,除非你100%確定無論你強迫什么都不會失敗並導致運行時錯誤(崩潰)。
我在我的項目中使用這樣的東西。
if let fileUrl = Bundle.main.url(forResource: "new", withExtension: "plist"),
let myDict = NSDictionary(contentsOf: fileUrl) as? [String:Any] {
print(myDict)
}
我有另一個顏色的plist,它有一個數組作為根。
if let fileUrl = Bundle.main.url(forResource: "color", withExtension: "plist"),
let data = try? Data(contentsOf: fileUrl) {
if let result = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [Any] {
print(result)
}
}
return (arry ) as! [Any]
您不能在Any類型上返回NSArray
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.