On 21.10.17 02:50, Santiago Gil via swift-users wrote:
I just ran into a bug after a Swift 4 migration where we expected [String] and got [Character] from a flatMap since flatMap will flatten the String since it's now a collection.  While I understand why flatMap behaves this way now that string are collections, in testing this I found some weird behaviour...

var strArr = ["Hi", "hello"]

let result = strArr.flatMap { x in

returnx

}


The type of results ends up being [Character] in the above case. However, adding a print statement changes things.

var strArr = ["Hi", "hello"]

let result = strArr.flatMap { x in

print(x)

return x

}

In this case, result is of type [String]

This seems like a bug, or is this expected Swift behaviour?


It looks like the compiler infers the type of the closure in the second example to be (String) -> Optional<String> instead of String -> String.

I don't know why and I definitely find it surprising.
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to