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在上面显示的断点处看起来不错。但是里面的函数 fitem 都搞砸了。

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 的方法,从长远来看,它们会导致问题。