iOS Closures in Swift Closure Expressions Using Closure Expressions

Awaleh Hassan
PRO
Awaleh Hassan
Pro Student 9,233 Points

Can anyone help me to find out what is wrong with this code?

func double(_ i: Int) -> Int { return i * 2 }

let doubler = double let doubledValues = [1,2,3,4].map(doubler)

let doubledValues2 = [1,2,3,4].map( {(_ i:Int) -> Int in return i * 2 }) let doubledValues3 = [1,2,3,4].map({_ i in return i * 2 }) let doubledValues4 = [1,2,3,4].map({_ i in i * 2}) let doubledValues5 = [1,2,3,4].map({$0 * 2}) let doubledValues7 = [1,2,3,4].map { $0 * 2 }

let doubledValue = [1,2,3,4].map() {$0 * 2}

closures.swift
func double(_ i: Int) -> Int {
    return i * 2
}

let doubler = double
let doubledValues = [1,2,3,4].map(doubler)



let doubledValues2 = [1,2,3,4].map( {(_ i:Int) -> Int in return i * 2 })
let doubledValues3 = [1,2,3,4].map({_ i in return i * 2 })
let doubledValues4 = [1,2,3,4].map({_ i in i * 2})
let doubledValues5 = [1,2,3,4].map({$0 * 2})
let doubledValues7 = [1,2,3,4].map { $0 * 2 }

let doubledValue = [1,2,3,4].map() {$0 * 2}

2 Answers

michelle gleed
michelle gleed
23,701 Points

I think you need to delete the opening and closing parenthesis () after .map . In swift, .map just takes a closure like this .map{} not like this .map({}).

Also, you don't need the external argument name in a closure. So you can get rid of these "_" in doubledValues3 and doubledValues4 then it should work.

func double(_ i: Int) -> Int {
    return i * 2
}

let doubler = double
let doubledValues = [1,2,3,4].map(doubler)



let doubledValues2 = [1,2,3,4].map { (_ i:Int) -> Int in return i * 2 }
let doubledValues3 = [1,2,3,4].map { i in return i * 2 }
let doubledValues4 = [1,2,3,4].map { i in i * 2 }
let doubledValues5 = [1,2,3,4].map { $0 * 2 }
let doubledValues7 = [1,2,3,4].map { $0 * 2 }

let doubledValue = [1,2,3,4].map { $0 * 2 }