Почему я могу передать аргумент типа «любой протокол» в параметр типа «Протокол»?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Почему я могу передать аргумент типа «любой протокол» в параметр типа «Протокол»?

Сообщение Anonymous »

У меня есть этот код: < /p>

Код: Выделить всё

import RealityKit

protocol RLActionImpl {}

struct RLAction {
let impl: Impl
}

struct RLAggregationActionImpl: RLActionImpl {
enum Aggregation {
case sequence
case group
}
let impls: [RLActionImpl]
let aggregation: Aggregation

func process(entity: Entity) {
impls.forEach { impl in
// ERROR
let action = RLAction(impl: impl)
entity.runAction(action)
}
}
}

extension Entity {
func runAction(_ action: RLAction) {
// some logic here
}
}
< /code>
он не работает с ошибкой: < /p>
Type 'any RLActionImpl' cannot conform to 'RLActionImpl'
Это имеет смысл, потому что любой rlactionImpl является непрозрачным ящиком, поэтому он не соответствует rlactionImpl .
Однако, если я просто перемещаю rlaction (IMPL: IMPL) в функцию Helper RunImpl , он работает:

Код: Выделить всё

extension Entity {
func runImpl(_ impl: some RLActionImpl) {
let action = RLAction(impl: impl)
runAction(action)
}
}

// ...

func process(entity: Entity) {
impls.forEach { impl in
entity.runImpl(impl)
}
}
Это странно - некоторые rlactionImpl означает, что тип известен во время компиляции, но компилятор не знает фактического типа какого -либо rlactionImpl , так как же я могу пройти в любом rlactionImpl ?

Подробнее здесь: https://stackoverflow.com/questions/797 ... -type-some
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как передать **kwargs аргумент, имеющий то же имя, что и позиционный аргумент?
    Anonymous » » в форуме Python
    0 Ответы
    58 Просмотры
    Последнее сообщение Anonymous
  • Как я могу передать этот аргумент в неконфессиональный аргумент?
    Anonymous » » в форуме C++
    0 Ответы
    102 Просмотры
    Последнее сообщение Anonymous
  • Как я могу передать этот аргумент в неконфессиональный аргумент?
    Anonymous » » в форуме C++
    0 Ответы
    130 Просмотры
    Последнее сообщение Anonymous
  • Протокол MODBUSTCP в протокол Ethernetip C#
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как передать параметр в параметр @Composable из @Composable, где первый из них вложен?
    Anonymous » » в форуме Android
    0 Ответы
    83 Просмотры
    Последнее сообщение Anonymous

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