代码之家  ›  专栏  ›  技术社区  ›  CMartins

我无法从plist键值展开值

  •  0
  • CMartins  · 技术社区  · 5 年前

    我是swift新手,我正在尝试将属性从nsDictionary加载到vTitle

    var nsDictionary: NSDictionary?
             if let path = Bundle.main.path(forResource: "AppData", ofType: "plist") {
                nsDictionary = NSDictionary(contentsOfFile: path)
             }
    let vTitle:String = nsDictionary["LbVacationsTitle"]
    

    当我调试时,我在nsDictionary中看到了正确的键,但是我不能仅打开一个键的值 LbVacationsTitle的类型是字符串

    2 回复  |  直到 5 年前
        1
  •  1
  •   Phillip Mills    5 年前

    取决于你的风格偏好。。。

    var nsDictionary: NSDictionary?
    if let path = Bundle.main.path(forResource: "AppData", ofType: "plist") {
        nsDictionary = NSDictionary(contentsOfFile: path)
    }
    if let dict = nsDictionary {
        let vTitle = dict["LbVacationsTitle"] as? String
        if let vt = vTitle {
            // ...
        }
    }
    

    ……或者。。。

    var nsDictionary: NSDictionary?
    if let path = Bundle.main.path(forResource: "AppData", ofType: "plist") {
        nsDictionary = NSDictionary(contentsOfFile: path)
    }
    guard let dict = nsDictionary else {
        print("Couldn't get a valid dictionary")
        return
    }
    let vTitle = dict["LbVacationsTitle"] as? String
    guard let vt = vTitle else {
        print("Couldn't find a string matching LbVacationsTitle")
        return
    }
    // ...
    
        2
  •  1
  •   vadian    5 年前

    请不要使用 NSDictionary 用于读取属性列表的Swift中的API。

    PropertyListSerialization PropertyListDecoder )

    let url = Bundle.main.url(forResource: "AppData", withExtension: "plist")!
    let data = try! Data(contentsOf: url)
    let dictionary = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String:Any]
    let vTitle = dictionary["LbVacationsTitle"] as! String
    

    设计 错误