Swift protocol is very interesting yet very weird. Sometimes it behaves very strangely.
import Foundation
protocol Command {}
struct TLDRCommand: Command {}
// Works
func getOk() -> [Command] {
return [TLDRCommand(), TLDRCommand(), TLDRCommand()]
}
// Does not work
func getFail() -> [Command] {
let myArray = [TLDRCommand(), TLDRCommand(), TLDRCommand()]
return myArray
}
// Casting also does not work
func getFail2() -> [Command] {
let myArray = [TLDRCommand(), TLDRCommand(), TLDRCommand()]
return myArray as [Command]
}
// This works, no complain about RHS not being the type of LHS
func getOk2() -> [Command] {
let myArray: [Command] = [TLDRCommand(), TLDRCommand(), TLDRCommand()]
return myArray
}
// And this also this works
func getOk3() -> [Command] {
var myArray: [Command] = []
myArray.append(TLDRCommand())
myArray.append(TLDRCommand())
return myArray
}