Как я могу вернуть все oop? - PullRequest
0 голосов
/ 31 марта 2020

Я хочу знать смещение прокрутки и нашел в inte rnet, что они сделали это следующим образом:

GeometryReader { geometry -> Text in
                        let newOffset = geometry.frame(in: .global).minY
                        if newOffset != self.offset {
                            self.offset = newOffset
                        }
                        return 
                            Text("aha")
                    }

к сожалению, мой "тип возврата"

ForEach (MathTaskType.allCases) { eachType in
                                MathTypeRow(mathType: eachType)
                            }

и я понятия не имею, что написать здесь (хххх).

Я попробовал это с Группой вокруг него, но у меня не получилось запустить ...

Спасибо за ваша помощь.

 GeometryReader { geometry -> xxxxxx in  //  what do i have to input here?
                    let newOffset = geometry.frame(in: .global).minY
                    if newOffset != self.offset {
                        self.offset = newOffset
                    }
                    return 
                        ForEach (MathTaskType.allCases) { eachType in
                            MathTypeRow(mathType: eachType)
                        }

                }

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Здесь тип AnyView является спасением:

GeometryReader { geometry -> AnyView in
                    let newOffset = geometry.frame(in: .global).minY
                    if newOffset != self.offset {
                        self.offset = newOffset
                    }
                    return AnyView ( // <- Here!
                        ForEach (MathTaskType.allCases) { eachType in
                            MathTypeRow(mathType: eachType)
                        }
                    )
                }

Он преобразует любой View в универсальный тип, без проблем с универсальными типами c.

Конечно, у ForEach тоже есть свой тип, я думаю, это что-то вроде ForEach<[MathTaskType], MathTaskType.ID, MathTypeRow>. Но это не так красиво, работа с AnyView также дает гибкость для будущих изменений.

0 голосов
/ 31 марта 2020
   return GeometryReader { geometry in

        List(someData, id: \.self) { data in
            Text("\(data)")


        Text("x: \(geometry.frame(in: .global).origin.x)")
        Text("y: \(geometry.frame(in: .global).origin.y)")
    }
}

Это будет отображать глобальные (координаты x, y внутри вашего текущего представления) для вашей ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...