Статьи

Sourcehunt — Swift Edition — март 2017

В продолжение Быстрого Месяца эта Охота на Источника полна Быстрого Добра. Мы покажем вам пакеты для работы со строками, создания стилей многократного использования, отображения пользовательских аватаров и переноса FontAwesome в iOS. У нас также есть пакет для синтаксического анализа JSON как босса и аутентификации пользователя для вашего следующего (или первого!) Приложения Vapor. Я уже говорил, что все это в Swift!

АртСабинцев / Гитара [350 ★]

Вдохновленный библиотекой Voca JavaScript, этот пакет делает работу со строками проще простого. Он добавляет некоторые полезные методы в класс String которые позволяют вам делать что угодно, от изменения регистра до добавления отступов.

Допустим, у меня есть приложение, которое принимает имя файла в качестве ввода от пользователя. Я хочу убедиться, что в имени файла нет пробелов или прописных слов. Благодаря гитаре я могу сделать это легко.

 var filename = "Deathstar Plans.pdf" if !filename.isAlphanumeric() { filename = filename.snakeCased().lowercased() } print(filename) // -> deathstar_plans.pdf 

Эта библиотека может сделать гораздо больше, и некоторые функции еще предстоит реализовать. Так что, хотите ли вы использовать магию струн или просто хотите помочь, смотрите не дальше, чем на гитаре!


Пшаранда / Атрибутика [70 ★]

Придерживаясь на мгновение, вот Атрибутика. Допустим, вы пишете социальное приложение, где ваши пользователи могут добавлять хештеги в любом месте своих постов. Вы хотели бы оформить эти хэштеги так, чтобы они выделялись на фоне остального текста. Атрибутика делает это простым. Это позволяет вам определять правила стиля для оформления ваших строк. Ниже я создал правило стиля для хэштегов:

 let myString = "Vader told me he's my dad today! I'm totally freaking out! #confused #shouldastayedondagoba" let formattedText = myString.styleHashtags( Style.foregroundColor(Color.blue).font(.systemFont(ofSize: 15)) ).attributedString 

который производит это:

Текст атрибута хэштега

Atributika также может анализировать пользовательскую разметку HTML, что позволяет легко стилизовать текст и повторно использовать стили в вашем приложении. Вот пример определения некоторых пользовательских стилей с помощью Atributika:

 let e = Style.font(.italicSystemFont(ofSize: 14)) let hl = Style.backgroundColor(Color.green) 

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

 let myString = "<e>Do</e>, or <e>do not</e>. <hl>There is no try.</hl>".style(tags: e, hl).attributedString 

Который выглядит так:

Атрибутика в стиле текста

Один из способов лучше использовать возможности этой библиотеки — определить все ваши стили в одном сервисном объекте. Затем этот объект можно использовать как фабрику атрибутивных строк, через которую вы передаете строки. Это позволяет вам хранить все ваши стили в одном месте и использовать их во всем приложении.


ayushn21 / AvatarImageView [173 ★]

Этот пакет особенно полезен при работе над социальным приложением. AvatarImageView предоставляет специальный UIImageView для отображения изображений профиля пользователя. Если у пользователя нет изображения, AvatarImageView отображает инициалы пользователя. Все, что вам нужно, это источник данных, который соответствует протоколу AvatarImageViewDataSource , например:

 struct MyUser: AvatarImageViewDataSource { var name = "Han Solo" } 

Этот объект может указывать несколько параметров, таких как изображение, конкретные инициалы, цвет фона и т. Д.

При желании вы также можете включить конфигурацию для таких вещей, как форма аватара, например:

 struct AvatarConfig: AvatarImageViewConfiguration { var shape: Shape = .square } 

Затем вы можете AvatarImageView ваш источник данных и конфигурацию следующим образом:

 myAvatar?.configuration = AvatarConfig() myAvatar?.dataSource = MyUser() 

И вот так, у вас есть изображение аватара!

AvatarImageView в действии

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


charles-oder / FontAwesomeSwift [1 ★]

Эта удивительная библиотека привносит удивительность FontAwesome в ваш следующий удивительный быстрый проект! (я уже сказал достаточно круто?) Если вы не знакомы с FontAwesome, я бы порекомендовал проверить его. Это набор векторной графики и CSS, который позволяет отображать и настраивать значки, как если бы они были текстом. Хотя оригинальный FontAwesome предназначен главным образом для Интернета, этот пакет обеспечивает ту же простоту и возможность настройки для iOS, WatchOS, MacOS и т. Д. До свидания, редактируя значки в Photoshop или GIMP.

API прост: создайте объект FASIcon , FASIcon его и поместите в FASIcon . Вы также можете конвертировать ваш FASIcon в UIImage или NSAttributedString . Вот пара примеров.

Сначала я сделаю большой UIImage из значка FontAwesome:

 myImageView?.image = FASFontAwesome().userCircleIcon(size: 32).color(color: UIColor.blue).image 

Далее я создам атрибутивную строку с несколькими значками, смешанными для забавы

 let home: NSAttributedString = FASFontAwesome().homeIcon(size: 17).attributedString let wifi: NSAttributedString = FASFontAwesome().wifiIcon(size: 17).color(color: UIColor.green).attributedString let myString: NSMutableAttributedString = NSMutableAttributedString() myString.append(home) myString.append(NSAttributedString(string: " is where the ", attributes: nil)) myString.append(wifi) myString.append(NSAttributedString(string: " connects automatically.", attributes: nil)) myLabel?.attributedText = myString - let home: NSAttributedString = FASFontAwesome().homeIcon(size: 17).attributedString let wifi: NSAttributedString = FASFontAwesome().wifiIcon(size: 17).color(color: UIColor.green).attributedString let myString: NSMutableAttributedString = NSMutableAttributedString() myString.append(home) myString.append(NSAttributedString(string: " is where the ", attributes: nil)) myString.append(wifi) myString.append(NSAttributedString(string: " connects automatically.", attributes: nil)) myLabel?.attributedText = myString 

И вот конечный результат!

FontAwesomeSwift в действии

Несмотря на свое название, этот пакет на самом деле поддерживает несколько различных пакетов значков, таких как Material, Ion и многие другие. Вы даже можете расширить его своими иконками!


node-ios / Serpent [70 ★]

Далее следует очень отлаженный и эффективный анализатор JSON под названием Serpent. Этот пакет серьезно круто. Мало того, что он очень быстро (они имеют статистику, чтобы доказать это), но создатели приложили немало усилий, чтобы сделать его очень проста в использовании.

Допустим, у меня есть struct форме, как это:

 struct StormTrooper { var name = "FN93847" var favoriteColor = "white" var shootingRangeScore = "2/457" } 

И я хочу получить некоторые StormTroopers из API. Первое, что я должен сделать, это научить Змея, как выглядят мои данные, и как бы я хотел, чтобы они анализировались или сериализировались. Для этого моя struct должна реализовывать протокол Serializable , который поставляется в комплекте с Serpent. Этот протокол требует следующих методов для отображения данных:

 extension StormTrooper: Serializable { init(dictionary: NSDictionary?) { name <== (self, dictionary, "name") favoriteColor <== (self, dictionary, "favorite_color") shootingRangeScore <== (self, dictionary, "shooting_range_score") } func encodableRepresentation() -> NSCoding { let dict = NSMutableDictionary() (dict, "name") <== name (dict, "favorite_color") <== favoriteColor (dict, "shooting_range_score") <== shootingRangeScore return dict } } 

Теперь это только для трех атрибутов. Написание всего этого кода для больших структур будет утомительным и отнимает много времени. К счастью, команда Serpent написала небольшое приложение для Mac под названием Model Boiler, которое генерирует этот код для вас. Чтобы использовать его, скопируйте вашу struct в системный буфер обмена и нажмите cmd + option + 6 . Это заполнит ваш буфер обмена всем сгенерированным кодом для этой struct . Затем вы можете вставить его туда, где хотите, и при необходимости внести любые изменения.


Буря / Турникет [95 ★]

Наконец, если вы пользуетесь Vapor на стороне сервера, вы найдете турникет особенно интересным. Люди из Stormpath написали это для управления аутентификацией пользователей в приложениях Vapor. Он использует несколько объектов для отслеживания текущего пользователя в приложении и проверки его подлинности. Он также предоставляет объекты для хранения учетных данных пользователя в памяти. Если вы хотите хранить учетные данные в другом месте, вы можете написать для этого пользовательские объекты под названием Realms .

Турникет также облегчает вход через третьих лиц, таких как Facebook и Google. Это надежная библиотека, написанная людьми, которые понимают аутентификацию.


Каждый из этих замечательных пакетов может быть чрезвычайно полезным, так что отправляйтесь туда и подарите им немного любви. Еще лучше, покопайтесь в их исходном коде и отправьте несколько PR. Ищете ли вы новые инструменты или новый проект, чтобы внести свой вклад, у вас есть отличный список здесь. Если вы нашли другие замечательные библиотеки, которыми хотите поделиться, сообщите нам об этом с помощью тегов #sourcehunt и #swift!