Круто!) Я что-то похожее сделал, но без реализации базовых протоколов.
Я когда уже написал статью нашел, что есть makeIterator(). Он только в одну сторону) Я думаю со временем в стандартную библиотеку добавят и обратный. Или может уже как-то можно его получить.
Swift String Iterator // Собеседование, работа над ошибками
Боюсь это тяжеловесный по памяти и времени способ, но по-моему сама простая реализация
var str = "hellol((leh"
let nums = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
let str2 = str.filter({ nums.contains($0) })
print(str2 == String(str2.reversed()) ? true : false)
Боже какие страсти. Было интересно почитать за размышлениями умных людей. Я правда уже после универа забыл о всяких там O(n) и прочее, но мне это пока не мешает работать. Хотя и требования к работе были проще, да и Swift пришлось осваивать за 2-3 недели.
P.S. покажусь занудой, но мне кажется это уже экономия на спичках смотреть на кол-во итераций со строкой и кол-во потребляемой памяти в таких мелких задачах.
P.S.S читал как что-то захватывающее.
Ох, какую старую тему вы раскопали
Да, тут проблема в памяти.
String(str2.reversed())
вот тут вам потребуется скопировать всю строчку, т.е. O(n)
доп. памяти.
Ещё мелкое замечание, print(str2 == String(str2.reversed()))
тут итак будет true
или false
Здравствуйте, да я с вами соглашусь, что в практике это редко бывает полезно. Хотя раз на раз не приходиться.
Я вскоре планирую опубликовать статью как раз на тему оценки алгоритмов с примерами на Swift. В том числе я постараюсь ответить на вопрос: “Зачем это всё?”.
Если интересно, то вы можете подписаться в медиуме или в твиттере чтобы получить уведомление