Swift 3 - 从 plist 的所有数组中获取所有项目

Posted

技术标签:

【中文标题】Swift 3 - 从 plist 的所有数组中获取所有项目【英文标题】:Swift 3 - Get all items from all arrays from plist 【发布时间】:2018-01-29 13:59:23 【问题描述】:

我正在尝试获取 plist 中所有键的所有项目的组合。

使用下面的代码,我可以分别获取键的值,并且可以获取它们的项目,但是当用户单击 index = 0 的单元格时,我想显示所有项目

这是列表

func loadPlist()->[[String:String]] 

    let path = Bundle.main.path(forResource: "myText", ofType: "plist")
    let dict = NSDictionary(contentsOfFile: path!)!
    var keyPath = ""


    if muscleIndex == 0
        //Show values from all keys here
    
    else if muscleIndex == 1
        keyPath = "abs"
    
    else if muscleIndex == 2
        keyPath = "arms"
    
    else if muscleIndex == 3
      keyPath = "back"
    
    else if muscleIndex == 4
        keyPath = "chest"
    
    else if muscleIndex == 5
        keyPath = "shoulders"
    
    else if muscleIndex == 6
        keyPath = "legs"
    


    let levelArray:AnyObject = dict.object(forKey: keyPath)! as AnyObject
    let nsArray:NSArray = (levelArray as? NSArray)!


    return nsArray as! [[String : String]]

【问题讨论】:

使用 let allKeyPaths = [String]() 怎么样,每次你做 allKeyPath.append("arms") (等等),如果为 0,做一个 for 循环添加所有的 keyPaths .使用NSMutableArray,对于allKeyPaths中的每个字符串(即keyPath),追加数组的内容? 【参考方案1】:

我会做什么,保留大部分逻辑: 使用“键路径”数组 然后对所有 keyPath 进行迭代,将每个“子数组”的内容附加到最终数组。

Use suggested solution 从 plist 中读取,因为从 Swift3+ 开始,我们倾向于尽可能避免使用 NSDictionary/NSArray(所有 NS 的东西)。

var keyPaths = [String]()

if muscleIndex == 0 
    keyPaths.append("abs")
    keyPaths.append("arms")
    ... (you can append all of them in one line too)

else if muscleIndex == 1 
    keyPaths.append("abs")

else if ...


var returnArray = [[String:String]]()
if let filePath = Bundle.main.path(forResource: "plistTest", ofType: "plist")


    let fileURL = URL.init(fileURLWithPath: filePath)
    if let plistData = try? Data.init(contentsOf: fileURL)
    
        let topLevel = try! PropertyListSerialization.propertyList(from: plistData, options: [], format: nil) as! [String:Any]
        for aKeyPath in keyPaths 
            let subArray = topLevel[aKeyPath] as! [[String:String]]
            returnArray.append(contentsOf: subArray)
        
    

return returnArray

【讨论】:

谢谢你的回答,我可以问一下,在你提到的for循环中,keys中的aKeyPath,keys来自哪里? 我的意思是 keyPaths,对不起 非常感谢,我必须说我已经在互联网上搜索了超过 3 周的时间来寻找这个完美的解决方案,我希望我能早点找到你

以上是关于Swift 3 - 从 plist 的所有数组中获取所有项目的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT 属性列表:从 TableView 到 DetailView plist

Swift 3 - 通过数组索引访问项目键值

Swift 中的 Array 扩展以使用 NSPropertyListReadOptions 从 plist 中读取数组

swift 将数据从.plist加载到数组

从 plist 错误 Swift 加载

如何在 swift 中读取数组和字典的 plist