SWIFT - 无法指定类型'[(String,[String:Any])]'的值来键入'[String:[String:Any]]'

时间:2016-10-12 06:08:39

标签: arrays swift string sorting

如何摆脱第一个值的“()”,以便分配给下一个变量?

这是我初始化词典的方式:

var imagedata: [String: [String: Any]] = [:]

我将数据加载到字典中,然后对其进行排序

imagedata = Array(imagedata).sort({ $0.0 < $1.0 })

但是它给了我一个'[(String,[String:Any])]'类型的值,而不是'[String:[String:Any]]',所以不能分配它。

2 个答案:

答案 0 :(得分:1)

#include<stdio.h> main() { int arr[]={2, 3, 4, 1, 6}; printf("%u, %u, %u\n", arr, &arr[0], &arr); return 0; } // imagedata是一本字典。

var imagedata: [String: [String: Any]] = [:]这里您已将imagedata添加到Array并进行了排序。因为我们无法对字典进行排序。

imagedata = Array(imagedata).sort({ $0.0 < $1.0 })的结果将是具有原始数组对象类型的数组。所以它返回sort({ $0.0 < $1.0 })。所以我们无法分配到imagedata变量。

实际上[(String, [String : Any])]什么也没做。因为数组只有一个对象。所以它返回同样的东西。

答案 1 :(得分:0)

您可以对其进行排序,但是您无法将结果存储回imagedata,因为Array(imagedata).sort({ $0.0 < $1.0 })会创建(已排序的)array,而imagedatadictionary的类型。

这会给你一个编译错误:imagedata = Array(imagedata).sort({ $0.0 < $1.0 })

虽然这不会Array(imagedata).sort({ $0.0 < $1.0 })

这告诉我们,问题不是sort方法,而是我们用来存储结果的变量。

词典有自己的sort方法,您可以使用。但是尝试分配array(从任何sort方法返回的值)到dictionaryimagedata)将始终失败。

修改

以下是您如何在字典中使用sort方法并使用返回值的示例:

var imagedata: [String: [String: Any]] = [:]
imagedata["a"] = ["Hello": 2]
imagedata["b"] = ["World": UIImage()]
imagedata["c"] = ["Foo": "Bar"]
imagedata["d"] = ["LifeQuest": 42]

print(imagedata)
// prints the content of the dictionary. Dictionaries are un-ordered, so you may always get different results here
// ["b": ["World": <UIImage: 0x60000009ea00>, {0, 0}], "a": ["Hello": 2], "d": ["LifeQuest": 42], "c": ["Foo": "Bar"]]

let orderedKeysAndValues = imagedata.sort({ $0.0 < $1.0 })
for (key, value) in orderedKeysAndValues {
    print("key: \(key)")
    print("value: \(value)")
}

// the content of the loop will print
// key: a
// value: ["Hello": 2]
// key: b
// value: ["World": <UIImage: 0x60000009ba80>, {0, 0}]
// key: c
// value: ["Foo": "Bar"]
// key: d
// value: ["LifeQuest": 42]