我知道swift中的structs一般都是pass-by-value。我对encapsulating使用struct,只需要几位信息,将struct添加到一个集合中,然后更改它的一小部分值。然而,我似乎陷入了一个问题,即structs不能正确更新,即使我在参数需要struct的任何地方都散布了关键字inout。我的直觉是为struct分配内存,并在它的pointer集合中引用它。简单地使用class是否有意义,即使我只需要一个可以更改的值列表。
发布于 2015-10-16 06:47:14
如果你需要引用语义,那么绝对要使用一个类。如果你想在数据结构和其他地方都能修改你的对象,一个类就是你需要的。仅仅为了获取引用语义而使用类是完全合理的。
同样,你也知道,函数参数上的inout实际上并不意味着通过引用传递。实际发生的情况是,您的结构的副本是由函数生成的。然后在函数中修改此副本,然后将其复制回原始变量。
发布于 2015-10-16 06:47:37
没有你的代码,我看不出你做错了什么,但它对我来说是有效的- Playground最小示例:
struct Grimxn {
var first: Int
var second: Int
}
func modify(inout v: Grimxn) {
v.first++
v.second--
}
var a = Grimxn(first: 1, second: 2)
print("\(a)") // "Grimxn(first: 1, second: 2)\n"
modify(&a)
print("\(a)") // "Grimxn(first: 2, second: 1)\n" - as required?我当然不想使用指针--为什么要在Swift中这样做--使用C!
https://stackoverflow.com/questions/33159546
复制相似问题