Рубрика «iOS» - 62

Коллекции

Разработчики, перешедшие на Swift с Objective-C, не могли не заметить удобнейший функционал, который предоставляет Swift для работы с коллекциями. Использование диапазонов в индексах

let slice = array[1..<10]

удобный синтаксис инициализации и добавления элемента в коллекцию, расширяемость, и, конечно функции высшего порядка

Filter

Самой часто используемой функцией для коллекций, пожалуй, является filter

let alex = Person(name: "Alex", age: 23)
let jenny = Person(name: "Jenny", age: 20)
let jason = Person(name: "Jason", age: 35)
let persons = [alex, jenny, jason]
let jNamedPersons = persons.filter { $0.name.hasPrefix("J") } // [jenny, jason]

Reduce

Реже используемой, но при этом крайне выразительной и удобной является функция reduce


let ages = persons.map{ Float($0.age) }
let average = ages.reduce(0, +) / Float(persons.count)

Можно писать свои функции высшего порядка и это довольно увлекательно:

func divisible(by numbers: Int...) -> (Int) -> Bool {
    return { input -> Bool in
        return numbers.reduce(true) { divisible, number in
            divisible && input % number == 0
        }
    }
}

let items = [6, 12, 24, 13]
let result = items.filter(divisible(by: 2, 3, 4)) // [12, 24]

Map

Функциональные понятия функторов и монад пришли к нам из языка Haskell. Говорят, невозможно просто взять и понять, что такое монада, а уж тем более невозможно это объяснить. Тем не менее мы можем временно отбросить все сложности и объяснить себе только то, что действительно необходимо, а те, кто захочет закопаться поглубже, могут начать с изучения Haskell.

Итак, для простоты мы можем считать, что функтор это контейнер, к которому применима функция map, а монада это функтор, к которому применима функция flatMap.

Поскольку коллекции это контейнеры, и в Swift для них определена функция map, они могут выступать в роли функторов:
для того, чтобы трансформировать коллекцию одного типа в коллекцию другого типа, возьмем наш массив persons и получим из него массив возрастов типа [Int]

let ages = array.map{ $0.age } // [23, 20, 35]

FlatMap

И в роли монад:
для того, чтобы из массива oprtional типов вернуть массив не опциональных значений

let optionalStrings: [String?] = ["a", nil, "b", "c", nil]
let strings = optionalStrings.flatMap { $0 } // ["a", "b", "c"]

для того, чтобы расширить первоначальную коллекцию

let odds = [1,3,5,7,9]
let evensAndOdds = odds.flatMap { [$0, $0 + 1] } // [1,2,3,4,5,6,7,8,9,10]

Читать полностью »

В последние несколько лет я встретил множество проектов, разработчиков и статей, которые обвиняют Model-ViewController архитектуру во многих, если не во всех бедах, которые происходят в iOS-сообществе.

Сегодня вашему вниманию я предлагаю некоторые альтернативные взгляды и подходы, а также приемы, которые могут помочь переосмыслить MVC и ведение проектов в целом. Всем кому интересно, добро пожаловать под кат.
Читать полностью »

С помощью этого дайджеста вы сможете узнать как аутентифировать пользователей по голосу, как собирать кубик Рубика с помощью приложения, как переводить приложение с помощью Google Sheets, какие технологии ищут работодатели на Stack Overflow и много других интересных вещей!

Дайджест интересных материалов для мобильного разработчика #195 (13-19 марта) - 1Читать полностью »

На хабре есть много статей о том, как работает рантайм Swift/Objective-C, но для еще более полного понимания того, что происходит под капотом, полезно залезть на самый низкий уровень и посмотреть, как код iOS приложений укладывается в бинарные файлы. Кроме того, безусловно, под капот приходится залезать при решении реверс-инжиниринговых задач. В этой статье мы обсудим самые простые конструкции Objective-C, а о Swift и более сложных примерах поговорим в последующих статьях.

В первых двух секциях я постарался максимально подробно осветить практические подробности, чтобы читателю, желающему пройти этот тьюториал, не нужно было каждые две минуты гуглить вещи в стиле "где найти бинарный файл приложения в Xcode". Дальше все максимально информативно.

Читаем бинарные файлы iOS-приложений - 1
Читать полностью »

На краудфандинговой платформе Kickstarter появился любопытный аксессуар для iPhone — «чехол» — полноценный телефон Android. Полноценный, со своими 2 SIM-картами (4G), слотом для SD-карты, 5-дюймовым FHD AMOLED дисплеем и собственной батареей на 2800mAh. Поддерживает беспроводную зарядку Qi, NFC, работает на OS Android 7.1 Nougat. Использует динамик и микрофон от iPhone. Такой симбиоз позволит осуществлять запись разговоров с iPhone и напрямую копировать данные на SD, а обладатели iPhone 7 смогут использовать его 3.5 mm выход на обычные наушники.
imageЧитать полностью »

На написание данной статьи меня подвиг пост: "Инженер VS Программист. Или куда уходят инженеры". Оказалось, что я далеко не один такой, и как видно из комментариев интерес к данной теме велик, поэтому я решил описать и прокомментировать свою историю о пути становления программистом.Читать полностью »

В новом дайджесте вы можете прочитать про поиск без интернета, денежные переводы в iMessage, создание иконок и токенов, самых зарабатывающих мобильных издателей и самые важные метрики.

Дайджест интересных материалов для мобильного разработчика #194 (6-12 марта) - 1Читать полностью »

«Яндекс» объяснил, как устроена новая версия ранее поискового мобильного приложения. Теперь «Яндекс» — это ассистент, который выдаёт рекомендации с учётом геолокационных данных, времени и контекста: «Утром приложение подскажет погоду и сообщит, через сколько на остановку приедет ваш автобус […] Вечером — посоветует хороший фильм из тех,Читать полностью »

image

1 марта в офисе Avito состоялась очередная встреча сообщества iOS разработчиков CocoaHeads. Под катом вас ждут небольшой рассказ о том, как прошёл митап, и, самое главное, видеозаписи докладов. Приятного просмотра!
Читать полностью »

Многие из нас все еще попадают в ситуации, когда нужно быстро найти важную информацию, но доступ в интернет ограничен или отсутствует. И одно дело – пытаться открыть развлекательный пост на сайте, и совсем другое – искать номер телефона горячей линии банка или больницы. Сегодня я впервые расскажу читателям Хабра о том, как ускорение поиска в приложении Яндекс привело к возможности искать важную информацию без интернета.

Поиск без интернета. Новая бета приложения Яндекс - 1

Но для начала нужно понять главное: зачем мы вообще взялись за офлайн-поиск, если сайты из результатов поиска все равно недоступны при отсутствии сети?

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js