Рубрика «iOS»

Google разрешил скачивать предварительную версию Android O (окончательная сборка появится в третьем квартале 2017). Будущая операционная система установит автоматические ограничения на фоновую активность приложений. Даже плохо написанные приложения, за счёт автоматической остановки, больше не смогут потреблять значительное количество запасённой аккумулятором энергии,Читать полностью »

Вчера Apple выпустила свой самый доступный iPad (от $329 в США) и красный iPhone 7. Новая линейка планшетов пришла на замену Air 2, потеснив мимоходом и младшие модели iPad Mini. Бандеролька разбирает характеристики нового iPad и делится другими новостями от Apple ➜

Новый iPad, красный iPhone. Пора обновляться? - 1
Читать полностью »

Apple представила приложении Clips для создания видео с текстом, графикой и другими эффектами. Сервис содержит различные фильтры для видео, например позволяет поставить смайлик, стрелку или облако с текстом. Можно добавить музыку, которая автоматически подстраивается под длину видео. Также Clips распознает лица в видеороликах и предлагает подставить имена из списка контактов.

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

Коллекции

Разработчики, перешедшие на 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Читать полностью »