Уловкой запуска асинхронной загрузки стилей является использование элемента и установка недопустимого значения для медиа-атрибута (я использую media = "none", но любое значение будет делать). Когда медиа-запрос оценивается как false, браузер все равно будет загружать таблицу стилей, но он не будет ждать, пока контент будет доступен до отображения страницы.
После того, как таблица стилей закончила загрузку media должен быть установлен в допустимое значение, поэтому правила стиля будут применены к документу. Событие onload используется для переключения свойства media на все:
Этот метод загрузки CSS будет доставлять полезный контент посетителям намного быстрее, чем стандартный подход. Критический CSS все еще может быть использован с обычным блокирующим подходом (или вы можете встроить его для достижения максимальной производительности), а некритические стили могут быть постепенно загружены и применены позже в процессе синтаксического анализа / рендеринга.
Этот метод использует JavaScript, но вы можете обслуживать не-JavaScript-браузеры, обертывая эквивалентные блокирующие элементы в элементе
:
Вы можете увидеть операцию в www.itcha. edu.sv
Источник в http://keithclark.co.uk/
Я думаю, вам нужно собрать свой результат в двух разных коллекциях. Создайте запрос на выборку для города вместо этого, используя тот же предикат, что и выше, но как обычный запрос вместо подзапроса.
Это вернет массив экземпляров города, которые соответствуют вашим критериям поиска, чтобы получить выбор стран, которые вы могли бы извлечь из массива городов
//fetch and predicate declaration...
let cities: [City] = try! context.fetch(request)
let countries = Set<Country>(cities.map({$0.country }))
. Предполагается, что вы определили отношение обратного к одному от города к стране
Это ожидаемое поведение. Он запрашивает Countries
и возвращает те, которые соответствуют предикату. У возвращаемого Countries
все еще есть все города, и если вы хотите только города с определенным правилом, вам придется собрать cities
для каждого Country