簡體   English   中英

快速轉換協議類型以構造並作為inout傳遞

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM