я чувствую себя немного потеряли, используя быстрый параметр Inout в следующем коде:Является ли swift inout параметром переменная или указатель?
var shouldContinue: Bool = true
func doSomeWork1(shouldContinue: inout Bool)
{
while shouldContinue
{
// ERROR: the compiler wants: doSomeWork2(shouldContinue: &shouldContinue)
doSomeWork2(shouldContinue: shouldContinue)
}
}
func doSomeWork2(shouldContinue: inout Bool)
{
while shouldContinue
{
}
}
Почему компилятор хочет doSomeWork2(shouldContinue: &shouldContinue)
вместо the compiler wants: doSomeWork2(shouldContinue: shouldContinue)
? is not shouldContinue
уже указатель в области doSomeWork1() ???
Спасибо за Ваш ответ. Если я правильно вас понимаю, поведение с копированием в копии означает, что я не могу использовать свою переменную bool, чтобы отменить работу, выполненную в другом потоке? Иль означает, что если я изменил значение исходного 'shouldContinue', он не изменится внутри функций, но старое значение будет восстановлено при возврате из функций? – Adeline
Да, вы не можете использовать его между потоками. Вы можете создать класс с булевым полем, а затем использовать экземпляр этого класса в нескольких потоках. И в этом случае вам не нужен параметр inout. Экземпляр класса - это ссылка (указатель), которая будет передана, и вы будете читать и записывать одно и то же логическое значение из нескольких потоков. –
есть ли «более простой способ»? Создание класса, содержащего логическое значение, кажется немного перегруженным/беспорядочным. – Adeline