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

标签 arrays swift nsarray nsdictionary plist

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

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

这是plist

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]]
}

最佳答案

我会做什么,保留你的大部分逻辑:
使用“关键路径”数组
然后对所有 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

关于arrays - Swift 3 - 从 plist 中获取所有数组中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48503005/

相关文章:

ios - 在 iOS 上将 Google Analytics 与 Swift 结合使用

ios - 界面测试失败 : Multiple Matches Found Error

ios - 查找字符串中重复次数最多的字符和重复字符的个数

ios - 错误 : *use of undeclared identifier 'firstObject' on a NSArray on an iOS 7 project

java - 多维数组/数组的数组列表的问题

python - 计算相邻 numpy 区域的单元格

swift - 用户使用 PFFacebookUtils 登录时取消选择 Facebook 权限

java - 链接到数组时没有合适的构造函数发现错误

C:是否可以合并/分组字符数组中的某些元素,使其成为字符串数组?

objective-c - 为什么在 Swift 中使用 NSArray 是可变的?