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