---
title: "draggable(_:id:containerNamespace:_:)"
framework: swiftui
role: symbol
role_heading: Instance Method
path: "swiftui/view/draggable(_:id:containernamespace:_:)"
---

# draggable(_:id:containerNamespace:_:)

Activates this view as the source of a drag and drop operation, allowing to provide optional payload and specify the namespace of the drag container this view belongs to.

## Declaration

```swift
nonisolated func draggable<Item, ItemID>(_ itemType: Item.Type = Item.self, id: KeyPath<Item, ItemID>, containerNamespace: Namespace.ID? = nil, _ payload: @escaping () -> Item?) -> some View where Item : Transferable, ItemID : Hashable, ItemID : Sendable

```

## Parameters

- `itemType`: A type of the dragged item.
- `id`: An key path of the identifier of an item.
- `containerNamespace`: A namespace of the associated drag container.
- `payload`: A closure that returns a single instance or a value conforming to doc://com.apple.documentation/documentation/CoreTransferable/Transferable that represents the draggable data from this view.

## Return Value

Return Value A view that activates this view as the source of a drag and drop operation, beginning with user gesture input.

## Discussion

Discussion Applying the draggable(_:id:containerNamespace:_:) modifier adds the appropriate gestures for drag and drop to this view. When a drag operation begins, a rendering of this view is generated and used as the preview image.    var fruits: [Fruit]

var body: some View {        ScrollView {            VStack {                ForEach(fruits) { fruit in                    FruitView(fruit)                        .draggable(Fruit.self, id: \.dragID) {                            fruit.supportsDrag ? fruit : nil                        }                }            }        }    }

struct Fruit: Transferable {        var supportsDrag: Bool        var dragID: UUID    } If the draggable view is enclosed in a container, it participates in container drag-and-drop sessions:    var fruits: [Fruit]    var selectedFruits: [UUID]

var body: some View {        ScrollView {            VStack {                ForEach(fruits) { fruit in                    FruitView(fruit)                        .draggable(Fruit.self, id: \.dragID) {                            fruit.supportsDrag ? fruit : nil                        }                }            }        }        .dragContainer(for: Fruit.self) { identifiers in            fruits(with: identifiers)        }        .dragContainerSelection(selectedFruits)    }

func fruits(with: [UUID]) -> [Fruit] { ... }

## See Also

### Moving transferable items

- [draggable(_:)](swiftui/view/draggable(_:).md)
- [draggable(_:preview:)](swiftui/view/draggable(_:preview:).md)
- [draggable(_:containerNamespace:_:)](swiftui/view/draggable(_:containernamespace:_:).md)
- [draggable(_:id:item:containerNamespace:)](swiftui/view/draggable(_:id:item:containernamespace:).md)
- [draggable(_:item:containerNamespace:)](swiftui/view/draggable(_:item:containernamespace:).md)
- [draggable(containerItemID:containerNamespace:)](swiftui/view/draggable(containeritemid:containernamespace:).md)
