Для Swift-3 и выше:
extension UIImageView {
public func imageFromUrl(urlString: String) {
if let url = URL(string: urlString) {
let request = URLRequest(url: url)
NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: .main, completionHandler: { (response, data, error) in
if let imageData = data as NSData? {
self.image = UIImage(data: imageData as Data)
}
})
}
}
}
DSL's хорош в ситуациях, где необходимо передать некоторому аспекту управления системы кому-то еще. Я использовал их в Механизмах Правил, где Вы создаете простой язык, который легче для менее - технические люди для использования для выражения - особенно в рабочих процессах.
, Другими словами, вместо того, чтобы заставить их изучить Java:
DocumentDAO myDocumentDAO = ServiceLocator.getDocumentDAO();
for (int id : documentIDS) {
Document myDoc = MyDocumentDAO.loadDoc(id);
if (myDoc.getDocumentStatus().equals(DocumentStatus.UNREAD)) {
ReminderService.sendUnreadReminder(myDoc)
}
я могу записать DSL, который позволяет мне сказать:
for (document : documents) {
if (document is unread) {
document.sendReminder
}
существуют другие ситуации, но в основном, где угодно Вы могли бы хотеть использовать макроязык, написать сценарий рабочего процесса или позволить подержанную настройку - это все кандидаты на DSL's.
DSL обозначает Предметно-ориентированный язык т.е. язык, специально разработанный для решения проблем в данной области.
, Например, Скидку с цены (язык разметки раньше редактировал сообщения на ТАК) можно рассмотреть как DSL.
Лично я нахожу место для DSL почти в каждом крупном проекте, я продолжаю работать. Чаще всего мне нужен некоторый подобный SQL-з¦просу язык. Другое общее использование является основанными на правилах системами, Вам нужен некоторый язык для определения rules\conditions.
DSL имеет смысл в контексте, где это трудно к describe\solve проблеме традиционными средствами.
При использовании Microsoft Visual Studio Вы уже используете несколько DSLs - поверхность для дизайна для веб-форм, winforms, и т.д. является DSL. Разработчик Класса является другим примером.
А DSL является просто рядом инструментов, которые (по крайней мере, в теории) делают разработку в определенном "домене" (т.е. визуальная разметка) легче, более интуитивный, и более продуктивный.
До создания DSL, некоторые люди материала как Ayende записали о, связан с "текстом, анализирующим" dsls, позволение разработчикам (или конечные пользователи) вводит "естественный текст" в приложение, которое анализирует текст и генерирует своего рода код или вывод на основе его.
Вы могли использовать любой язык для создания собственного DSL. Microsoft Visual Studio имеет много точек расширяемости и шаблоны & методы "Инструментарий Автоматизации Руководства" и Visual Studio SDK могут помочь Вам в добавлении функциональности DSL к Visual Studio.
DSL являются основными компиляторами для пользовательских языков. Хороший 'свободный и открытый' инструмент для разработки их доступен в ANTLR. Недавно, я смотрел на этот DSL для язык конечного автомата использование на новом проекте. Я соглашаюсь с Tim Howland выше, что они могут быть хорошим способом позволить кому-то еще настроить Ваше приложение.
К вашему сведению книга по DSLs готовится как часть ряда подписи Martin Fowler.
, Если тот же стандарт как другие книги в ряду, это должно быть хорошее чтение.
[еще 113] информация здесь
DSL является просто необычным именем и может означать разные вещи:
направляющие (вещь Ruby) иногда называют DSL, потому что она добавляет специальные методы (и перезаписывает некоторые встроенные также) для разговора о веб-приложениях
МУРАВЕЙ, синтаксис Make-файла и т.д. является также DSLs, но имеет их собственный синтаксис. Это - то, что я назвал бы DSL.
Один важный аспект этой шумихи: действительно имеет смысл думать о Вашем приложении с точки зрения языка. О чем Вы хотите говорить в Вашем приложении? Они должны затем быть Вашими классами и методами:
DSL в основном создает Ваш собственный маленький подъязык для решения определенной доменной проблемы. Это решено с помощью объединения в цепочку метода. Языки, где точки и круглые скобки являются дополнительной справкой, делают их, выражение кажется более естественным. Это может также быть подобно шаблону разработчика. DSL не являются самими языками, а скорее шаблоном, что Вы обращаетесь к своему API для совершения вызовов быть больше сам объяснительный.
Одним примером является Guice, Пользовательское Руководство Guice http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 имеет некоторое описание далее вниз того, как интерфейсы связываются с реализациями, и в какой контексты.
Другой типичный пример для языков запросов. Например:
NewsDAO.writtenBy("someUser").before("someDate").updateStatus("Deleted")
В реализации, вообразите каждый метод, возвратившись или новый объект Запроса или просто это обновление себя внутренне. В любой точке можно завершить цепочку при помощи, например, строк () для получения всех строк или updateSomeField, поскольку я сделал выше здесь. Оба возвратят объект результата.
я рекомендовал бы смотреть на пример Guice выше также, поскольку каждый вызов там возвращает новый тип с новыми опциями на них. Хороший IDE позволит Вам завершаться, проясняя, какие опции Вы имеете в каждой точке.
Редактирование: кажется, что многие рассматривают DSLs как новые, простые, единственные языки цели с их собственными синтаксическими анализаторами. Я всегда связываю DSL как использование метода, объединяющего в цепочку как конвенция выразить операции.