Swift 具有 'Any' 的结构未正确复制到函数中
Swift struct with 'Any' not copied correctly into a function
这是我的结构 -
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
复制失败?
在 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
的方法,从长远来看,它们会导致问题。
这是我的结构 -
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
复制失败?
在 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
的方法,从长远来看,它们会导致问题。