这是我的结构 -
struct SettingsItem {
var id: String!
var defaultValue: Any!
init() {
}
}
然后它被使用 -
var item2 = SettingsItem()
item2.id = "abcd"
item2.defaultVaule = "1234"
f(item2) // <-- breakpoint shows a good item
执行时,item
看起来很好看上面显示的断点。但是在函数f
内部,item
都搞砸了。
func f(item: SettingsItem) {
println(item) // <-- bad item!
}
在调用f
时看起来没有正确复制项目,但是当我在操场上尝试它时它没有重现。
对于导致这种情况的任何想法?
更新
当我将var defaultValue: Any!
的类型更改为其他任何内容(例如Int!
或String!
)时似乎运行良好。
还尝试使用默认构造函数(删除了我的init()),没有帮助。
使用Any
时为什么无法复制?
答案 0 :(得分:1)
在Xcode 6.4中,我在游乐场也会遇到相同的行为。
可能最好不要依赖内置的字符串转换功能,因为它实际上仅用于调试目的。相反,请尝试为您的类型提供明确的Printable
实现:
extension SettingsItem: Printable {
var description: String {
// make this string whatever you think the appropriate
// string representation of your value is
return "{id: \(id), defaultValue: \(defaultValue)}"
}
}
如果我添加它,它现在会在f
内打印出来。
P.S。我建议您考虑如何从结构中删除!
和Any
,这些问题会导致长期问题。