簡體   English   中英

從 swift 三元運算符返回引用

[英]Return references from a swift ternary operator

let myRef = isTrue() ? &objectA : &objectB

錯誤:“使用無關的‘&’”

這可以在經典的 if/else 條件中完成,但不能在三元中完成。 有誰知道為什么?

我有一個更新結構的函數。 此結構作為 inout myStruct 參數傳遞。 三元運算符是確定傳遞給函數的結構體

啊。 在原始問題中這樣說會很有幫助。

你不能像這樣使用& ,因為 Swift 中的“地址”並不是真正的東西。 如果您不想進入不安全的指針,並且目標是根據條件調用帶有 inout 參數&objectA&objectB的函數f ,請使調用本身有條件:

isTrue() ? f(&objectA) : f(&objectB)

只需將一個對象分配給myRef (並且它必須是一個var !),然后在函數調用時引用:

// Given
struct Test {
    var x: String
}

func isTrue() -> Bool {
    return Bool.random()
}

func byRef(test: inout Test) {

    test.x = String(test.x.reversed())
}

let objectA = Test(x: "hello")
let objectB = Test(x: "hola")

// Now create a ref
// Note that it MUST be a var (not let)
var myRef = isTrue() ? objectA : objectB

// Now we can pass it to a function
print("Before: \(myRef.x)")
byRef(test: &myRef)
print("After: \(myRef.x)")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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