[英]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.