[英]Swift cast protocol type to struct and pass as inout
protocol ValueHolder {
}
struct A: ValueHolder {
var value = 5
}
var x: ValueHolder = A()
func f(a: inout A) {
a.value = 10
}
我想将x传递给f。 可能吗?
编辑:我了解所有有关值语义和inout参数的人员。 问题是x
需要强制转换为A
,我想知道是否可以不复制而将其复制( as
对它的类型化复制),以便可以在x
上使用f
。
我想使用传递x(而不是它的副本)到f。 可能吗?
不完全是-至少,如果参数是A,则不是。A是结构。 即使使用inout
,结构仍然是值类型。 inout
允许替换原始值,但替换为另一个A。简单地说,无法在适当位置更改结构。
既然如此,您的问题似乎失去了意义。 由于结构无法在适当位置进行突变,因此根本没有真正的理由在这里使用inout
。 您没有做任何需要 inout
事情。 您不妨删除inout
并接受值语义:
func f(a: A) -> A {
var a = a
a.value = 10
return a
}
x = f(a:x as! A)
如果您确实要保留inout
,则输入a:
作为ValueHolder并在函数内部进行强制转换,如下所示:
var x: ValueHolder = A()
func f(a: inout ValueHolder) {
var b = a as! A
b.value = 10
a = b
}
f(a:&x)
(x as! A).value // 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.