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