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