Создайте собственный CLPlacemark для RideIntent

Я пытаюсь создать собственный CLPlacemark, используя структуру 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(метка:)'

Есть идеи, что не так?

Документация:


person Dennis    schedule 18.04.2017    source источник


Ответы (4)


Только что узнал, что в iOS 12/Xcode 10 вам также необходимо включить структуру контактов, так как параметр postaladdress имеет класс CNPostalAddress, необходимый для этого инициализатора.

import Intents
import Contacts
person Rool Paap    schedule 22.10.2018
comment
Никогда бы не узнал, если бы не ваш комментарий! - person yspreen; 03.01.2019

Создав подкласс CLPlacemark, можно использовать протокол фреймворков Intents init(location:name:postalAddress).

Где-то в вашем проекте:

class MyPlacemark: CLPlacemark {}

Ваш код для создания собственного CLPlacemark:

let placeLocation = CLLocation(latitude: 50.00, longitude: 8.00)
let placeName = "Some name"
let customPlacemark = MyPlacemark(location: w1Location, name: w1Name, postalAddress: nil)
person Dennis    schedule 19.04.2017
comment
Я попробовал ваше решение, но все равно получаю ту же ошибку :( Какие фреймворки вы импортируете? Я пробовал CoreLocation и Intents... Ошибка все еще :( - person Georg; 30.08.2018

Вам нужно использовать

init(location:name:postalAddress);

Вызов placemarkWithLocation является объективным C, а не быстрым, поэтому он выдает это сообщение об ошибке.

В документации вы увидите выбор языка справа. init(location:name:postalAddress — это быстрый вызов, который вам понадобится для создания новой метки.

person Adam Richardson    schedule 18.04.2017

Вместо этого вы также можете заменить MKPlacemark, который предоставляет еще пару инициализаторов (найденный в http://szulctomasz.com/2015/07/01/ios-unit-testing-in-swift-and-clplacemark-mocking.html)

person GilroyKilroy    schedule 06.09.2017