These things can look confusing at first especially when some of Swift's abbreviated syntax is used. The filter function is an example of functional programming (along with map and reduce, etc). In your code the filter function takes each element of myArray in turn, performs a logical check (true or false) and puts those elements that return true, into newArray.
Filter takes a closure as a parameter. This closure is what performs that logical check on each element in myArray. Your code is written using trailing closure syntax so that's why there is no () around the closure. This line:
(number) -> Bool
is just the signature of the closure and we know that it takes some element and returns true or false. 'number' is just a variable name (of whatever type myArray contains - in this case Int) that will be used inside the closure.
In this case return number % 2 == 0
just checks if each element of myArray is even.
It can be written:
let newArray = myArray.filter { $0 % 2 == 0 }
The signature can be omitted since filter always takes an element and returns a Bool. The variable $0 in place of the formally declared variable name and as usual 'return' can be omitted for a single line of code.
I really hope I haven't made things more complicated.