При использовании SwiftUI мне нравится создавать функции, возвращающие представления, это простой способ отделить и очистить код. Нравится:

func deleteButton() -> some View { return (Button...) }

Это работает как шарм, но когда я пытаюсь вернуть список вроде этого:

func itemsList() -> List<Never, some DynamicViewContent> { ... }

Я получаю сообщение об ошибке «некоторые типы реализованы только для объявленных типов свойств и индексов, а также для возвращаемого типа функций». Я пробовал без "некоторых" и просто "DynamicViewContent" без списка, но ни один из них не работал.

Может кто-то помочь мне с этим?

0
Adam 14 Сен 2021 в 09:33

2 ответа

Лучший ответ

Опция 1:

Возврат some View:

func myList() -> some View {
   List(items, id:\.self) { item in
     Text("Hello")
   }
}

Вариант 2:

Используйте определенный тип. Самый простой способ, который я могу придумать, - это временно установить для переменной значение List. Например:

var myList = List(items, id:\.self) { item in
    Text("Hello")
}

Если я затем нажму с нажатой клавишей Option на myList, Xcode отобразит всплывающее окно, показывающее точный тип, которым предположительно является myList. Вы можете использовать это как возвращаемый тип для своей функции. В случае моего надуманного примера это List<Never, ForEach<[GameModel], GameModel, Text>>, где items равно [GameModel]

2
jnpdx 14 Сен 2021 в 06:55

Вместо этого вы можете указать общий параметр:

func itemsList<Content: DynamicViewContent>() -> List<Never, Content> {  }
0
Philip Dukhov 14 Сен 2021 в 06:44