Я заметил другое поведение в ленивой оценке с Xcode 10.2 +.
Если у меня есть текущий код:
class C {
private let myString: String?
private let tag: Int
init(string: String?, tag: Int) {
myString = string
self.tag = tag
}
func f() -> String? {
print("\(tag) called")
return myString
}
}
let a = C(string: nil, tag: 0)
let b = C(string: "2", tag: 1)
let c = C(string: nil, tag: 2)
let array = [a, b, c]
let string = array.lazy.compactMap { $0.f() }.first
Я бы ожидал вывод:
0 called
1 called
(который у меня есть с Xcode 10.1)
но это на самом деле:
0 called
1 called
1 called // called twice
Я бы не сказал, что это проблема со Swift 5, потому что мой проект все еще использует Swift 4.0