首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Swift 3 iOS应用程序从拼写列表中读取

如何使用Swift 3 iOS应用程序从拼写列表中读取
EN

Stack Overflow用户
提问于 2016-10-07 14:05:12
回答 7查看 38.7K关注 0票数 29

-免责声明-

我对iOS和Swift开发非常陌生,但对编程也不是特别陌生。

我有一个包含Swift3元素的基本iOS应用程序。

我已经创建了一个plist文件,其中包含一些我想要在应用程序中读取和显示的条目。(不需要写访问权限)

如何在Swift3中读取捆绑的 plist 文件的给定键的值?

这对我来说似乎是一个非常简单的问题,但一堆搜索让我对我的整个概念方法产生了疑问。

有帮助的建议将不胜感激。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-10-07 14:09:30

与您在Swift 2.3或更低版本中所做的相同,只是语法发生了变化。

代码语言:javascript
复制
if let path = Bundle.main.path(forResource: "fileName", ofType: "plist") {

    //If your plist contain root as Array
    if let array = NSArray(contentsOfFile: path) as? [[String: Any]] {

    }

    ////If your plist contain root as Dictionary
    if let dic = NSDictionary(contentsOfFile: path) as? [String: Any] {

    }
}

注意:在Swift中,最好使用Swift的泛型类型数组和字典,而不是NSArrayNSDictionary

编辑:代替NSArray(contentsOfFile: path)NSDictionary(contentsOfFile:),我们也可以使用PropertyListSerialization.propertyList(from:)plist文件中读取数据。

代码语言:javascript
复制
if let fileUrl = Bundle.main.url(forResource: "fileName", withExtension: "plist"),
   let data = try? Data(contentsOf: fileUrl) {
       if let result = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [[String: Any]] { // [String: Any] which ever it is 
            print(result)
       }
}
票数 72
EN

Stack Overflow用户

发布于 2018-03-12 13:02:19

随着Swift 4引入可编码

步骤1:从捆绑包中加载Plist文件。

第2步:使用PropertyListDecoder将属性列表值解码为语义类型。

第3步:创建可编码的结构

完整的代码-

代码语言:javascript
复制
 func setData() {
        // location of plist file
        if let settingsURL = Bundle.main.path(forResource: "JsonPlist", ofType: "plist") {

            do {
                var settings: MySettings?
                let data = try Data(contentsOf: URL(fileURLWithPath: settingsURL))
                    let decoder = PropertyListDecoder()
                settings = try decoder.decode(MySettings.self, from: data)
                    print("toolString is \(settings?.toolString ?? "")")
                print("DeviceDictionary is \(settings?.deviceDictionary?.phone ?? "")")
                print("RootPartArray is \(settings?.RootPartArray ?? [""])")

            } catch {
                print(error)
            }
        }
    }
}
struct MySettings: Codable {
    var toolString: String?
    var deviceDictionary: DeviceDictionary?
    var RootPartArray: [String]?

    private enum CodingKeys: String, CodingKey {
        case toolString = "ToolString"
        case deviceDictionary = "DeviceDictionary"
        case RootPartArray
    }

    struct DeviceDictionary: Codable {
        var phone: String?
        init(from decoder: Decoder) throws {
            let values = try decoder.container(keyedBy: CodingKeys.self)
            phone = try values.decodeIfPresent(String.self, forKey: .phone)
        }
    }
    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        toolString = try values.decodeIfPresent(String.self, forKey: .toolString)
        deviceDictionary = try values.decodeIfPresent(DeviceDictionary.self, forKey: .deviceDictionary)
        RootPartArray = try values.decodeIfPresent([String].self, forKey: .RootPartArray)

    }
}

示例Plist文件-> https://gist.github.com/janeshsutharios/4b0fb0e3edeff961d3e1f2829eb518db

票数 12
EN

Stack Overflow用户

发布于 2017-09-08 10:03:22

这是一个基于Nirav D's answerSwift 3实现

代码语言:javascript
复制
    /// Read Plist File.
    ///
    /// - Parameter fileURL: file URL.
    /// - Returns: return plist content.
    func ReadPlist(_ fileURL: URL) -> [String: Any]? {
        guard fileURL.pathExtension == FileExtension.plist, let data = try? Data(contentsOf: fileURL) else {
            return nil
        }
        guard let result = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [String: Any] else {
            return nil
        }
        print(result)
        return result
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39910461

复制
相关文章

相似问题

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