繁体   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