Свифт 3 версии ответа @Alexey Globchastyy:
class func getGenres(completionHandler: @escaping (genres: NSArray) -> ()) {
...
let task = session.dataTask(with:url) {
data, response, error in
...
resultsArray = results
completionHandler(genres: resultsArray)
}
...
task.resume()
}
Приложение-служба включает уже настроенный для вас хост веб-сайта. Библиотека служб - это библиотека служб, на которые узел может ссылаться и запускаться.
Если вы начинаете с библиотеки служб (рекомендуется), вы можете выбрать любой узел, который хотите (служба Windows, IIS / ASP.NET или даже консольное приложение), и вы просто ссылаетесь на свою библиотеку с нового хоста. Выбор приложения-службы ограничивает ваш хост только IIS / ASP.NET (хотя это может быть приемлемо для ваших целей, но ограничивает протоколы, которые вы можете использовать).
Изменить : Изменения в IIS с тех пор, как я написал это, позволяют для более широкого спектра протоколов в активированных службах ASP.NET, поэтому выбор приложения службы гораздо менее ограничен, чем раньше.
Если все, что у вас есть, это один проект, я вижу только дополнительную сложность, если вы разделитесь, черт возьми. Я использовал библиотеку, когда у меня были некоторые конкретные варианты использования, когда мне приходилось размещать как в службе Windows, так и в IIS.
Для IIS вы можете перемещать классы и интерфейсы в библиотеку, но оставлять файлы .SVC в веб-проекте. Вы должны отредактировать файлы .SVC, чтобы они указывали на правильно определенные классы.