首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Swift中获取plist作为字典?

如何在Swift中获取plist作为字典?
EN

Stack Overflow用户
提问于 2014-06-05 03:05:18
回答 27查看 194.1K关注 0票数 211

我正在尝试苹果新的Swift编程语言,我遇到了一些问题……

目前,我正在尝试读取一个plist文件,在Objective-C中,我将执行以下操作以获取NSDictionary形式的内容:

代码语言:javascript
复制
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:filePath];

如何在Swift中获取plist作为字典?

我假设我可以通过以下命令获得plist的路径:

代码语言:javascript
复制
let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist")

当它起作用时(如果它是正确的?):我如何以字典的形式获取内容?

还有一个更一般的问题:

是否可以使用默认的NS*类?我想so...or我是不是漏掉了什么?据我所知,NS*类的默认框架仍然有效,可以使用吗?

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2016-09-12 22:54:36

swift 3.0中,从Plist读取

代码语言:javascript
复制
func readPropertyList() {
        var propertyListFormat =  PropertyListSerialization.PropertyListFormat.xml //Format of the Property List.
        var plistData: [String: AnyObject] = [:] //Our data
        let plistPath: String? = Bundle.main.path(forResource: "data", ofType: "plist")! //the path of the data
        let plistXML = FileManager.default.contents(atPath: plistPath!)!
        do {//convert the data to a dictionary and handle errors.
            plistData = try PropertyListSerialization.propertyList(from: plistXML, options: .mutableContainersAndLeaves, format: &propertyListFormat) as! [String:AnyObject]

        } catch {
            print("Error reading plist: \(error), format: \(propertyListFormat)")
        }
    }

阅读更多。

票数 61
EN

Stack Overflow用户

发布于 2014-06-05 03:08:38

你仍然可以在Swift中使用NSDictionaries:

Swift 4的

代码语言:javascript
复制
 var nsDictionary: NSDictionary?
 if let path = Bundle.main.path(forResource: "Config", ofType: "plist") {
    nsDictionary = NSDictionary(contentsOfFile: path)
 }

针对Swift 3+

代码语言:javascript
复制
if let path = Bundle.main.path(forResource: "Config", ofType: "plist"),
   let myDict = NSDictionary(contentsOfFile: path){
    // Use your myDict here
}

和较早版本的Swift

代码语言:javascript
复制
var myDict: NSDictionary?
if let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist") {
    myDict = NSDictionary(contentsOfFile: path)
}
if let dict = myDict {
    // Use your dict here
}

NSClasses仍然可用,并且完全可以在Swift中使用。我认为他们可能很快就会想要将重点转移到swift上,但目前swift API并不具备核心NSClasses的所有功能。

票数 299
EN

Stack Overflow用户

发布于 2014-10-13 14:10:00

如果我想把一个.plist转换成一个Swift字典,我会这么做:

代码语言:javascript
复制
if let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist") {
  if let dict = NSDictionary(contentsOfFile: path) as? Dictionary<String, AnyObject> {
    // use swift dictionary as normal
  }
}

为Swift 2.0编辑的

代码语言:javascript
复制
if let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist"), dict = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
    // use swift dictionary as normal
}

为Swift 3.0编辑的

代码语言:javascript
复制
if let path = Bundle.main.path(forResource: "Config", ofType: "plist"), let dict = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
        // use swift dictionary as normal
}
票数 142
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24045570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档