为 RideIntent 创建自定义 CLPlacemark

Create custom CLPlacemark for RideIntent

我正在尝试使用 Intents 框架创建自定义 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)

不幸的是,上面的代码给我以下错误信息:

Ambiguous reference to member 'init(placemark:)'

有什么问题吗?

文档:

你需要使用

init(location:name:postalAddress);

placemarkWithLocation 调用是 objective-C 而不是 swift 因此它抛出该错误消息的原因。

在文档中,您会在右侧看到语言选择。 init(location:name:postalAddress 是您需要创建新地标的 swift 调用。

通过子类化 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)

您也可以替换为 MKPlacemark,它公开了更多的初始化程序(在 http://szulctomasz.com/2015/07/01/ios-unit-testing-in-swift-and-clplacemark-mocking.html 中找到)

刚刚发现在 iOS 12 / Xcode 10 中你还必须包含 Contacts 框架,因为 postaladdress 参数具有此初始化程序所需的 class CNPostalAddress

import Intents
import Contacts