在 swift 3 操场上阅读 plist
Posted
技术标签:
【中文标题】在 swift 3 操场上阅读 plist【英文标题】:Read plist in swift 3 playground 【发布时间】:2016-12-10 09:43:54 【问题描述】:我在这里关注了很多问题,但似乎没有任何效果。
我在Playground
中使用Swift3
。在 El Capitan 和 Xcode 8.1 上运行。
我有一个plist
,其根为Dictionary
,其中包含一个 Int 值和两个 Int 二维数组。
plist
我所关注的每个问题似乎都与我所得到的最接近的是,操场不返回错误,但它似乎一直在运行(旋转图标永远不会停止)。
我当前的代码,我相信这是我所达到的最接近的。
import Foundation
if let path = Bundle.main.path(forResource: "levelList", ofType: "plist")
let plistXML = FileManager.default.contents(atPath: path)!
let mydata = try! PropertyListSerialization.propertyList(from: plistXML, options: [], format: nil) as! [String:Any]
我在类似上下文中从以前的堆栈溢出答案中尝试过的其他选项。
let mydata = Dictionary(fromPropertyList: path, format: "XML") as! [String: Any]
******
let mydata = Dictionary(contentsOf: path) as? [String: Any]
根据链接问题的说明,数据已正确添加到资源文件夹中。 我已经按照 cmets 中的建议重新启动了 Xcode(和 mac)。过了一会儿,执行停止并出现错误“错误:执行被中断原因 exc_bad_access (code=1 address=0x0)” 再次重新启动后,代码有效。自从游乐场正在显示以来,我如何快速将数据提取到数组中 [“2级”:[“Col”:<_ns_array0>(
【问题讨论】:
***.com/questions/28956211/… 【参考方案1】:您使用了错误的 API,您需要加载 Data
而不是文件系统中的内容。
if let url = Bundle.main.url(forResource: "levelList", withExtension: "plist"),
let plistData = try? Data(contentsOf: url )
let mydata = try! PropertyListSerialization.propertyList(from: plistData, options: [], format: nil) as! [String:Any]
【讨论】:
根据 OP 自己的回答,您似乎投错了。就像这个答案一样,OP 的原始代码正在转换为字典。但是 OP 自己的回答表明问题是由于 plist 文件包含一个数组而不是字典这一事实。并且 OP 没有使用错误的 API 来获取数据,只是使用了与此处建议的 API 不同的 API。 @rmaddy 令人困惑。问题中的屏幕截图清楚地表明字典作为根元素。 糟糕。我没注意截图。是的,根是字典,因此您的代码在这方面是正确的。所以OP自己的答案根本没有意义。【参考方案2】:为了最终让我使用的程序正常工作。
devices = NSArray(contentsOfFile: path) as! [AnyObject]
通过进入活动监视器并强制退出被识别为无响应的名为 com.apple.coresimulator 的进程,解决了 Playground 持续运行的问题。这样做后,操场立即运行。
【讨论】:
以上是关于在 swift 3 操场上阅读 plist的主要内容,如果未能解决你的问题,请参考以下文章