https://github.com/suryashekhawat/pythonExamples/blob/master/string_toggle.py
def toggle(mystr):
arr = []
for char in mystr:
if char.upper() != char:
char=char.upper()
arr.append(char)
else:
char=char.lower()
arr.append(char)
return ''.join(map(str,arr))
user_input = raw_input()
output = toggle(user_input)
print output
Проблема не compactMap
по сути. Существует две проблемы:
, Если Вы хотите, чтобы последовательность звонила compactMap
лениво, необходимо использовать lazy
.
казалось бы, что first
предотвращает ленивое поведение. Если Вы используете first(where:)
, тем не менее, Вы действительно наслаждаетесь ленивым поведением.
Таким образом, в то время как несколько неэлегантный, следующее достигает что поиск you’re:
if let vc = (chain.lazy.compactMap { [110] as? ViewController }.first { _ in true } ) {
...
}
Или, как Вы говорите, можно реализовать first
(или lazyFirst
) на [1 110]:
extension Sequence {
var first: Element? {
return first { _ in true }
}
}
И затем это более упрощенное представление теперь все еще лениво:
if let vc = chain.lazy.compactMap({ [112] as? ViewController }).first {
...
}