Соответствие актеров протоколамIOS

Программируем под IOS
Ответить
Anonymous
 Соответствие актеров протоколам

Сообщение Anonymous »

Какова причина того, что компилятор Swift слишком строг в отношении соответствия протоколу? Например, рассмотрим следующий код:
protocol TestProtocol {
func testFunction()
}

actor TestClass: TestProtocol {
func testFunction() {

}
}

Сборка завершается с ошибкой, в которой говорится, что метод экземпляра изолированного субъекта 'testFunction()' не может использоваться для удовлетворения требований неизолированного протокола.
Но не является ли главная цель потокобезопасности актера и предотвращения гонок за данными? Если да, то где гонка данных в приведенном выше коде или соответствие протоколу в целом?
Изменить: на основе ответов, полученных от @Sweeper и @paulw11. , вот код, который я написал, и он вылетает во время выполнения с ошибкой Неверное предположение исполнителя актера
import Foundation
protocol TestProtocol {
func increment()
func decrement()
}

actor TestActor: @preconcurrency TestProtocol {
var i = 5

func increment() {
i = i + 1
print("incremented \(i)")
}

func decrement() {
i = i - 1
print("decremented \(i)")
}
}

class TestClass {
let testActor = TestActor()

func g(x: any TestProtocol) {
x.increment() // this synchronously calls an isolated method!
x.decrement()
}

func f() {
print("inside f")
g(x: testActor)
}
}



Подробнее здесь: https://stackoverflow.com/questions/793 ... -protocols
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»