Ես ունեմ մի մեթոդ.
func allRegions() -> [MappedRegion] {
return self.items.lazy.compactMap { item in item.valveAny }.flatMap { valve in valve.regions }
}
Ես անկեղծորեն զարմացա, որ սա ստացվեց: Ես այստեղ ծույլ գործեր եմ անում, բայց, ըստ երևույթին, կա ծույլ հաջորդականություն, որը վերածվում է MappedRegion-ի հաջորդականության:
Այնուհետև ես որոշ խեղճ ժամանակներ էի անում և փոփոխեցի ֆունկցիան՝ կարդալու համար.
func allRegions() -> [MappedRegion] {
let startTime = Date()
let result = self.items.lazy.compactMap { item in item.valveAny }.flatMap { valve in valve.regions }
self.sumRender += (Date() - startTime)
return result
}
Բայց դա ստեղծեց սխալ.
Cannot convert return expression of type 'LazySequence<FlattenSequence<LazyMapSequence<LazyMapSequence<LazyFilterSequence<LazyMapSequence<LazySequence<[StatusRowItem]>.Elements, ValveAbstract?>>, ValveAbstract>.Elements, [MappedRegion]>>>' (aka 'LazySequence<FlattenSequence<LazyMapSequence<LazyMapSequence<LazyFilterSequence<LazyMapSequence<Array<StatusRowItem>, Optional<ValveAbstract>>>, ValveAbstract>, Array<MappedRegion>>>>') to return type '[MappedRegion]'
Դա ի սկզբանե անակնկալ էր։ Ես գտա, որ եթե ես նշեի result
-ի վերադարձի տեսակը որպես [MappedRegion]
, բոլորը երջանիկ էին (օրինակ՝ let result:[MappedRegion] = ...
):
Ի՞նչ է կատարվում այստեղ։ Ես հասկանում եմ, որ սկզբնական մեկ տողի ֆունկցիան ենթադրում է արդյունքի տեսակը որպես [MappedRegion], այնպես որ ես, հավանաբար, շատ օգուտներ չեմ ստանում ծույլ օգտագործումից: Բայց ինչն է ինձ շփոթեցնում, այն է, որ այս պարտադրանքը ծույլ հաջորդականությունից դեպի ֆիքսված զանգված ավտոմատ կերպով հիշեցնում է C-ով քասթինգը, և ես մտածեցի, որ Սվիֆթը քասթինգ չի արել: