Создать пользовательский CLPlacemark для RideIntent
Я пытаюсь создать пользовательский CLPlacemark с помощью инфраструктуры Intents. Я импортирую "Intents" в начале файлов.
Я нашел это решение:
let waypointLocation = CLLocation(latitude: 50.00, longitude: 8.00)
let waypointName = "Some Name"
let w1 = CLPlacemark.init(location: waypointLocation,
name: waypointName,
postalAddress: nil)
К сожалению, приведенный выше код дает мне следующее сообщение об ошибке:
Неоднозначная ссылка на участника 'init(метка:)'
Есть идеи что не так?
Документация:
- init (местоположение: имя: postalAddress:) https://developer.apple.com/reference/corelocation/clplacemark/2132103-init
4 ответа
Используя подкласс CLPlacemark, можно использовать протокол инициализации Intents (location: name: postalAddress).
Где-то в вашем проекте:
class MyPlacemark: CLPlacemark {}
Ваш код для создания пользовательской метки CLP:
let placeLocation = CLLocation(latitude: 50.00, longitude: 8.00)
let placeName = "Some name"
let customPlacemark = MyPlacemark(location: w1Location, name: w1Name, postalAddress: nil)
Только что выяснилось, что в iOS 12 / Xcode 10 вам также нужно включить платформу Contacts, так как параметр postaladdress имеет класс CNPostalAddress, необходимый для этого инициализатора
import Intents
import Contacts
Вместо этого вы также можете заменить MKPlacemark, который предоставляет еще пару инициализаторов (об этом можно узнать на http://szulctomasz.com/2015/07/01/ios-unit-testing-in-swift-and-clplacemark-mocking.html).
Вам нужно использовать
init(location:name:postalAddress);
Вызов placemarkWithLocation является целью-C, а не быстрым, поэтому он выдает это сообщение об ошибке.
В документации вы увидите выбор языка с правой стороны. init(location:name:postalAddress
это быстрый вызов, вам нужно будет создать новую метку места.