Вернуть ссылки от быстрого троичного оператора - PullRequest
2 голосов
/ 20 марта 2020
let myRef = isTrue() ? &objectA : &objectB

ошибки: «Использование посторонних» & «»

Это может быть сделано в пределах класса c, если / еще условно, но не в троичной. Кто-нибудь знает почему?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Просто присвойте объект 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)")
1 голос
/ 22 марта 2020

У меня есть функция, которая обновляет структуру. Эта структура передается как входной параметр myStruct. Тернарный оператор должен определить, какую структуру передать функции

Ah. Было бы полезно сказать это в исходном вопросе.

Вы не можете использовать & таким образом, потому что «адрес» в Swift на самом деле не вещь. Если вы не хотите использовать небезопасные указатели и если цель состоит в том, чтобы вызвать функцию f с аргументом inout &objectA или &objectB в зависимости от условия, сделайте сам вызов условным :

isTrue() ? f(&objectA) : f(&objectB)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...