带有'Any'的Swift结构未正确复制到函数中

时间:2015-05-15 06:22:04

标签: swift struct

这是我的结构 -

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时为什么无法复制?

1 个答案:

答案 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,这些问题会导致长期问题。