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
}
}