@@ -1383,9 +1383,24 @@ extension _ViewListOutputs {
13831383 package mutating func multiModifier< T> ( _ modifier: _GraphValue < T > , inputs: _ViewListInputs ) where T: ViewModifier {
13841384 switch views {
13851385 case let . staticList( elements) :
1386- views = . staticList( ModifiedElements ( base: elements, modifier: WeakAttribute ( modifier. value) , baseInputs: inputs. base) )
1387- case . dynamicList( _, _) :
1388- _openSwiftUIUnimplementedFailure ( )
1386+ views = . staticList(
1387+ ModifiedElements (
1388+ base: elements,
1389+ modifier: WeakAttribute (
1390+ modifier. value
1391+ ) ,
1392+ baseInputs: inputs. base
1393+ )
1394+ )
1395+ case let . dynamicList( attribute, listModifier) :
1396+ views = . dynamicList(
1397+ attribute,
1398+ ModifiedViewList . ListModifier (
1399+ pred: listModifier,
1400+ modifier: modifier,
1401+ inputs: inputs. base
1402+ )
1403+ )
13891404 }
13901405 }
13911406
@@ -1565,6 +1580,102 @@ private struct ModifiedElements<Modifier>: ViewList.Elements where Modifier: Vie
15651580 }
15661581}
15671582
1583+ // MARK: - ModifiedViewList [6.5.4]
1584+
1585+ private struct ModifiedViewList < Modifier> : ViewList where Modifier: ViewModifier {
1586+ let base : ViewList
1587+ let modifier : WeakAttribute < Modifier >
1588+ let inputs : _GraphInputs
1589+
1590+ func count( style: IteratorStyle ) -> Int {
1591+ base. count ( style: style)
1592+ }
1593+
1594+ func estimatedCount( style: IteratorStyle ) -> Int {
1595+ base. estimatedCount ( style: style)
1596+ }
1597+
1598+ var traitKeys : ViewTraitKeys ? {
1599+ base. traitKeys
1600+ }
1601+
1602+ var viewIDs : ID . Views ? {
1603+ base. viewIDs
1604+ }
1605+
1606+ var traits : ViewTraitCollection {
1607+ base. traits
1608+ }
1609+
1610+ func applyNodes(
1611+ from start: inout Int ,
1612+ style: IteratorStyle ,
1613+ list: Attribute < any ViewList > ? ,
1614+ transform: inout SublistTransform ,
1615+ to body: ApplyBody
1616+ ) -> Bool {
1617+ let item = Transform ( modifier: modifier, inputs: inputs)
1618+ transform. push ( item)
1619+ defer { transform. pop ( ) }
1620+ return base. applyNodes (
1621+ from: & start,
1622+ style: style,
1623+ list: list,
1624+ transform: & transform,
1625+ to: body
1626+ )
1627+ }
1628+
1629+ func edit(
1630+ forID id: ID ,
1631+ since transaction: TransactionID
1632+ ) -> Edit ? {
1633+ base. edit ( forID: id, since: transaction)
1634+ }
1635+
1636+ func firstOffset< OtherID> (
1637+ forID id: OtherID ,
1638+ style: IteratorStyle
1639+ ) -> Int ? where OtherID : Hashable {
1640+ base. firstOffset ( forID: id, style: style)
1641+ }
1642+
1643+ struct Transform : ViewList . SublistTransform . Item {
1644+ var modifier : WeakAttribute < Modifier >
1645+ var inputs : _GraphInputs
1646+
1647+ func apply( sublist: inout _ViewList_Sublist ) {
1648+ sublist. elements = ModifiedElements ( base: sublist. elements, modifier: modifier, baseInputs: inputs)
1649+ }
1650+
1651+ func bindID( _ id: inout _ViewList_ID ) {
1652+ _openSwiftUIEmptyStub ( )
1653+ }
1654+ }
1655+
1656+ class ListModifier : _ViewListOutputs . ListModifier {
1657+ let pred : _ViewListOutputs . ListModifier ?
1658+ let modifier : WeakAttribute < Modifier >
1659+ let inputs : _GraphInputs
1660+
1661+ init (
1662+ pred: _ViewListOutputs . ListModifier ? ,
1663+ modifier: _GraphValue < Modifier > ,
1664+ inputs: _GraphInputs
1665+ ) {
1666+ self . pred = pred
1667+ self . modifier = WeakAttribute ( modifier. value)
1668+ self . inputs = inputs
1669+ }
1670+
1671+ override func apply( to list: inout any ViewList ) {
1672+ pred? . apply ( to: & list)
1673+ list = ModifiedViewList ( base: list, modifier: modifier, inputs: inputs)
1674+ }
1675+ }
1676+
1677+ }
1678+
15681679// MARK: - BaseViewList [6.4.41]
15691680
15701681private struct BaseViewList : ViewList {
0 commit comments