Section 7/111 menit

7. Ownership dalam Return dan Closures

7. Ownership dalam Return dan Closures

Return Values

swift
// Nilai yang di-return selalu "consuming" — ownership berpindah ke caller
func createLargeData() -> LargeData {
    var data = LargeData()
    // ... populate data
    return data  // data di-"consume" ke return value — tidak ada copy
}

let result = createLargeData()  // result sekarang memiliki LargeData

Closures dan Capturing

swift
// Closure yang capture nilai borrowing — tidak bisa escape
func process(data: borrowing LargeData, sync handler: () -> Void) {
    // handler bisa capture data karena tidak escape
    handler()
}

// Closure yang escape — capture harus consume atau copy
func processAsync(data: consuming LargeData, async handler: @escaping () async -> Void) {
    Task {
        await handler()
        // data tidak bisa diakses di sini karena sudah di-consume
    }
}