2016-03-05 29 views
2

我的字典键值类型,如:如何在Swift中为字典类型的数组应用removeAtIndex?

var images = [String:UIImage]() 

如果它是字符串的正常排列,我可以通过下面的删除值:

images.removeAtIndex(indexPath.row) 

但是,如果它的参数类型是字典,然后我给它以下错误:

Cannot convert value of type 'Int' to expected argument type 'DictionaryIndex'.

如何从给定索引处的数组中删除删除?任何人都可以帮助我吗?

+0

字典是无序的,所以这个功能可能会给予回复意想不到的结果。 – tktsubota

+0

我看到swift有这个选项:removeAtIndex(index:DictionaryIndex )。但我不知道如何使用它。 – laser2302

+0

在这种情况下,我相信DictionaryIndex只是字符串的键入类型,即字典的键类型。 –

回答

1

您只需使用它的String键删除该项目。

images.removeValueForKey("someString") 

编辑: 每点评:

我不完全明白你的意思。我将重新创建你的场景。但我会使用Strings而不是UIImage's,因为我在命令行上执行此操作。

1> var images = [String:String]() 
images: [String : String] = 0 key/value pairs 
    2> images["one"] = "someting 1 2 3" 
    3> images["two"] = "something else 4 5 6" 
    4> images 
$R0: [String : String] = 2 key/value pairs { 
    [0] = { 
    key = "one" 
    value = "someting 1 2 3" 
    } 
    [1] = { 
    key = "two" 
    value = "something else 4 5 6" 
    } 
} 

现在,根据您的示例,我想删除一个项目。

5> images.removeValueForKey("one") 
$R1: String? = "someting 1 2 3" 
    6> images 
$R2: [String : String] = 1 key/value pair { 
    [0] = { 
    key = "two" 
    value = "something else 4 5 6" 
    } 
} 

EDIT2:

看完后你赞扬你的示例代码第二次,我想你是误会你有什么。

你有一个字符串键的字典。与UIImages以一对一的关系配对。

所以,如果你删除一个项目的基础上的关键,你删除它的唯一属性是一个图像。

现在,由于您在原始问题中提到了数组,所以我认为这就是您想要的。

1> var images = [String:[String]]() 

对您而言,这将是`变种图像=字符串:[UIImage的]

现在你有每个键图像的阵列。

images: [String : [String]] = 0 key/value pairs 
    1> images["one"] = [String] 
    2> images["one"]!.append("first") 
    3> images 
$R0: [String : [String]] = 1 key/value pair { 
    [0] = { 
    key = "one" 
    value = 1 value { 
     [0] = "first" 
    } 
    } 
} 
    4> images["one"]!.append("second") 
    5> images 
$R1: [String : [String]] = 1 key/value pair { 
    [0] = { 
    key = "one" 
    value = 2 values { 
     [0] = "first" 
     [1] = "second" 
    } 
    } 
} 
    6> images["one"]!.removeAtIndex(0) 
$R2: String = "first" 
    7> images 
$R3: [String : [String]] = 1 key/value pair { 
    [0] = { 
    key = "one" 
    value = 1 value { 
     [0] = "second" 
    } 
    } 
} 
+0

我们如何使用这个选项,因为如果我们使用这个选项,那么这个键的所有值都会被删除。 – DJ1

+0

我有同样的问题,并希望只删除一个值不是所有的特定键。 – DJ1

+0

是的,他们会被删除。这就是你要求的。我已更新我的答案,以证明地图看起来像 – Cripto

0

您正在声明一个字典,而不是阵列:

var images = [String:UIImage]() 

键的类型是串,而且也只有一个存储的用于特定键值(UIImage的)。如果你需要为每个字符串键图像阵列,你可以尝试:

var images = [String: Array<UIImage>]() 

然后访问:

imageList = images["someKeyString"] // returns an array of UIImages 
for image in imagelist { 
    //do something 
} 
相关问题