GMSAutocompleteFilter类型已过时。

4

我收到了这个警告:

let filter = GMSAutocompleteFilter()
filter.type = .address -> **'type' is deprecated: type property is deprecated in favor of types**

好的...所以我查看了官方文档,他们告诉我应该使用这个替代方案:

let filter = GMSAutocompleteFilter()
filter.types = [.address]

我这么做但出现了以下错误:

'Array.ArrayLiteralElement' (即 'String') 类型没有 'address' 成员

tyes error

我不明白出了什么问题。该库已经更新到最新版本。


我也处于同样的位置。你找到解决方案了吗? - KinneyKare
@KinneyKare - 不是。只是留下了“.type”并等待解决方案。 - Nicola Salvaro
2个回答

2
属性 types 的期望类型是字符串数组。如果您查看 GMSAutocompleteFilter 的定义,会提到筛选器类型的链接。
请参考此链接:https://developers.google.com/maps/documentation/places/ios-sdk/supported_types#table1 如果您没有指定任何类型,则返回地址列表。
请尝试以下代码(Swift 5.7及以上版本):
func fetch() {
    let filter = GMSAutocompleteFilter()
    filter.countries = ["AU"]
    GMSPlacesClient.shared().findAutocompletePredictions(fromQuery: searchText, filter: filter, sessionToken: nil) { predictions, error in
        if let error {
            return print("error \(error)")
        }
        if let results = predictions {
            if results.isEmpty { return print("No result found") }

            _ = results.map {
                print("Primary - \($0.attributedPrimaryText)")
                print("Secondary - \(String(describing: $0.attributedSecondaryText))")
                print("Full - \($0.attributedFullText)")
                print("Types - \($0.types)")
                return $0.attributedFullText
            }
        }
    }
}

我还打印了我认为API内部用于搜索地点的过滤器类型。

我收到的大多数类型是"route""geocode"

从文档链接中我推断出,表格3具有更广泛的过滤器,而表格1具有非常特定的过滤器。

因此,如果您传递过滤器类型"address",它将尝试提供可能的准确地址。

filter.types = ["address"]

-1
types是一个字符串数组,所以只保留第一个。
place.addressComponents?.first(where: { $0.types.first == "postal_code" })?.name

1
你的解决方案是一个变通方法,但并不是我真正想要的。如果你看这里: https://developers.google.com/maps/documentation/places/ios-sdk/autocomplete 你会发现推荐的方法是: let filter = GMSAutocompleteFilter() filter.types = [.address] 问题是它在xCode中报错,我不知道为什么。 - Nicola Salvaro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接