【发布时间】:2016-01-14 17:56:17
【问题描述】:
在此处 (https://stackoverflow.com/a/25322949/5583125) 跟进有关 SequenceTypes 和字典的出色回复。
我正在使用:Xcode 7.2 和 Swift 2.1
更新:澄清一下,我在 Playground 中运行它
当嵌入字典中的子项是一个类时,这很有效,但我在使用 Struct 时遇到了问题 - 我不明白为什么会这样。
效果很好:
class Item {
let title: String
init(_ title: String) {
self.title = title
}
}
class ItemList : SequenceType {
private var itemDict: [String : Item] = [ : ];
subscript(key : String?) -> Item? {
get {
if key != nil {
return self.itemDict[key!];
}
return nil;
}
set(newValue) {
if key != nil {
self.itemDict[key!] = newValue;
}
}
}
func generate() -> DictionaryGenerator<String, Item> {
return itemDict.generate()
}
}
var list = ItemList()
list["key1"] = Item("value1")
list["key2"] = Item("value2")
for (key, value) in list {
print("Key: \(key) Foo: \(value.title)")
}
炸毁:
当我将 Item 更改为 Struct 时,for-each 会爆炸,我会收到“EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)”异常。
struct Item {
let title: String
init(_ title: String) {
self.title = title
}
}
//Not so happy when Item is a struct
for (key, value) in list {
print("Key: \(key) Foo: \(value.title)")
}
有人能告诉我为什么会这样吗?我得到了 Matt Gibson 的回复中描述的基本概念 - 但我不明白为什么让 Item 成为结构而不是 Class 会破坏事情。
【问题讨论】:
-
你在编译项目中试过了吗?
-
class ItemList : SequenceType这是否会导致编译器错误,因为SequenceType有`Self1 要求? -
@Cristik:问题(据我所知)是将
class Item更改为struct,而不是class ItemList。但我无法重现该问题(也无法重现)。 -
谢谢大家的帮助。下面的评论 - 原来这是一个游乐场?
标签: ios swift generator sequence