Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift:从数组的结构中筛选字典键,这是可选的_Arrays_Swift_Dictionary_Struct_Optional - Fatal编程技术网

Arrays Swift:从数组的结构中筛选字典键,这是可选的

Arrays Swift:从数组的结构中筛选字典键,这是可选的,arrays,swift,dictionary,struct,optional,Arrays,Swift,Dictionary,Struct,Optional,现在,我想: 包含案例中消息属性的所有键的数组-tag1和tag2中没有nils。我只是尝试了我知道的一切,但我做不到。尝试过过滤案例,获得了可选方案 没有没有没有标记的预览,因此不需要带有它们的数组。我只需要一个带有标签的列表,以便对其进行排序并显示案例中的相关预览。这就是为什么我需要知道如何从案例中访问这些预览。让我们在UITableView中说: struct Test { var title: String var message: [String?: String?]

现在,我想:

包含案例中消息属性的所有键的数组-tag1和tag2中没有nils。我只是尝试了我知道的一切,但我做不到。尝试过过滤案例,获得了可选方案

没有没有没有标记的预览,因此不需要带有它们的数组。我只需要一个带有标签的列表,以便对其进行排序并显示案例中的相关预览。这就是为什么我需要知道如何从案例中访问这些预览。让我们在UITableView中说:

struct Test {
    var title: String
    var message: [String?: String?]

    init(title: String, message: [String?:String?]) {
        self.title = title
        self.message = message
    }
}

var cases = [
     Test(title: "1", message: ["tag1": nil]),
     Test(title: "2", message: ["tag2": "preview2"]),
     Test(title: "3", message: [nil:nil]),
     Test(title: "4", message: ["tag1":"preview4"])
]
当然,一本带有[tags:previews]的字典也很完美


提前谢谢!我希望我想要的是可能的。

这里有一个数组,它只包含所有键和值都不是零的案例中的元素:

或使用简写符号:

let filtered = cases.filter { test in
    return test.message.allSatisfy({ entry in
        return entry.key != nil && entry.value != nil
    })
}
对于structs,有一个默认的初始值设定项,因此您可以通过以下方式编写测试结构:

let filtered = cases.filter {
    $0.message.allSatisfy({
        $0.key != nil && $0.value != nil
    })
}

我不完全清楚您试图做什么,但是,这将过滤您的cases数组,以仅测试消息字典中包含非nil值的对象:

struct Test {
    var title: String
    var message: [String?: String?]
}

tags字典现在包含:[tag1:preview4,tag2:preview2]

对于1,提供您在输入时期望的特定输出将非常有用。结果会是[preview2,preview4]吗?还是别的什么?如果还有一个[tag3:preview3],您是否希望包含它?如果没有不带标记的预览,为什么将消息定义为[String?:String?]而不是[String:String]??类似地,感觉上只有一个键和一个值,或者没有键和值。为什么要买字典?为什么不使用结构消息{var key,value:String}然后使用消息??
struct Test {
    var title: String
    var message: [String?: String?]
}
let nonNil = cases.filter { (test) -> Bool in
    return Array(test.message.values).filter({ (value) -> Bool in
        return value == nil
    }).count <= 0
}
let tags = nonNil.map( { $0.message} ).flatMap { $0 }.reduce([String:String]()) { (accumulator, current) -> [String:String] in
    guard let key = current.key, let value = current.value else { return accumulator }
    var accum = accumulator
    accum.updateValue(value, forKey: key)
    return accum
}