Какова причина того, что компилятор 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
Соответствие актеров протоколам ⇐ IOS
Программируем под IOS
1736502087
Anonymous
Какова причина того, что компилятор Swift слишком строг в отношении соответствия протоколу? Например, рассмотрим следующий код:
protocol TestProtocol {
func testFunction()
}
actor TestClass: TestProtocol {
func testFunction() {
}
}
Сборка завершается с ошибкой, в которой говорится, что метод экземпляра изолированного субъекта 'testFunction()' не может использоваться для удовлетворения требований неизолированного протокола.
Но не является ли главная цель потокобезопасности актера и предотвращения гонок за данными? Если да, то где гонка данных в приведенном выше коде или соответствие протоколу в целом?
[b]Изменить[/b]: на основе ответов, полученных от @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)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79345016/actors-conformance-to-protocols[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия