我正面临使用swift从plist文件中读取数据的问题
我的代码:
let Chapterpath = NSBundle.mainBundle().pathForResource("chapterMapping", ofType: "plist")
let dict2 = NSDictionary(contentsOfFile: Chapterpath!)
let chaptername = dict2?.objectForKey("chapterName")
let chapterNumber = dict2?.objectForKey("pageNumber")
接下来我试图将plist数据添加到数组中,我应该只使用
var myArray = [chapterName]
我的问题:上面的代码是否正确? 或者我错过了什么 当我尝试使用println打印plist数据时((chapterName)) 我收到了一个错误
谢谢
答案 0 :(得分:2)
首先,plist中的Root
对象为NSArray
而不是NSDictionary
。
其次,如果你想在基金会收藏中使用KVC(我不相信这适用于Swift的数组),你需要拨打valueForKeyPath
。
let chapterPath = NSBundle.mainBundle().pathForResource("chapterMapping", ofType: "plist")
if let arrayOfItems: [AnyObject] = NSArray(contentsOfFile: chapterPath!) {
let chapterNames: [String] = arrayOfItems.valueForKeyPath("chapterName") as NSArray as [String]
let pageNumbers: [Int] = arrayOfItems.valueForKeyPath("pageNumber") as NSArray as [Int]
}
第三,快速执行此操作的方法是使用map
函数,但arrayOfItems
需要是一个强定义类型,它可能比它的价值更多。例如:
let array: [ChapterMetaData] = // define it here
let chapterImages = array.map { $0.chapterImage }
答案 1 :(得分:1)
正如你所说,你有一个包含多个元素的数组。 objectForKey不搜索大厅树级别,并为您提供名称的第一个级别。你有多个值必须包含一个循环。请尝试以下方法:
var Chapterpath:NSString = NSBundle.mainBundle().pathForResource("chapterMapping", ofType: "plist");
var chapters:NSArray = NSArray(contentsOfFile: Chapterpath);
for chapter in chapters {
let chaptername = chapter["chapterName"]
let chapterNumber = chapter["pageNumber"]
println(chaptername);
}
答案 2 :(得分:1)
使用以下代码将Plist
数据读取到NSArray
:
let path = NSBundle.mainBundle().pathForResource(plistName, ofType: "plist")
var list = NSArray(contentsOfFile: path!) as [[String:String]]
答案 3 :(得分:1)
解析项目中AppConfig.plist文件的最简单方法:
var dictionaryObj: NSDictionary?
if let filePath = NSBundle.mainBundle().pathForResource("AppConfig", ofType: "plist")
{
dictionaryObj = NSDictionary(contentsOfFile: filePath)
}
if let dict = dictionaryObj
{
//parse it as NSDictionary
}
else
{
//dictionaryObj is nil or doesn't contain anything.
}
答案 4 :(得分:0)
如果Plist
Root
是数组,则可以使用NSArray:
let path = NSBundle.mainBundle().pathForResource("OrderHelper", ofType: "plist")
let myArray = NSArray(contentsOfFile: path!)
如果Plist
Root
是词典,则可以使用NSDictionary:
let path = NSBundle.mainBundle().pathForResource("OrderHelper", ofType: "plist") {
let myDict = NSDictionary(contentsOfFile: path!)