我正在尝试苹果新的Swift编程语言,我遇到了一些问题……
目前,我正在尝试读取一个plist文件,在Objective-C中,我将执行以下操作以获取NSDictionary形式的内容:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:filePath];
如何在Swift中获取plist作为字典?
我假设我可以通过以下命令获得plist的路径:
let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist")
当它起作用时(如果它是正确的?):我如何以字典的形式获取内容?
还有一个更一般的问题:
是否可以使用默认的NS*类?我想so...or我是不是漏掉了什么?据我所知,NS*类的默认框架仍然有效,可以使用吗?
发布于 2016-09-12 22:54:36
在swift 3.0中,从Plist读取。
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)")
}
}
阅读更多。
发布于 2014-06-05 03:08:38
你仍然可以在Swift中使用NSDictionaries:
Swift 4的
var nsDictionary: NSDictionary?
if let path = Bundle.main.path(forResource: "Config", ofType: "plist") {
nsDictionary = NSDictionary(contentsOfFile: path)
}
针对Swift 3+的
if let path = Bundle.main.path(forResource: "Config", ofType: "plist"),
let myDict = NSDictionary(contentsOfFile: path){
// Use your myDict here
}
和较早版本的Swift
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的所有功能。
发布于 2014-10-13 14:10:00
如果我想把一个.plist转换成一个Swift字典,我会这么做:
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编辑的:
if let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist"), dict = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
// use swift dictionary as normal
}
为Swift 3.0编辑的:
if let path = Bundle.main.path(forResource: "Config", ofType: "plist"), let dict = NSDictionary(contentsOfFile: path) as? [String: AnyObject] {
// use swift dictionary as normal
}
https://stackoverflow.com/questions/24045570
复制相似问题