【问题标题】:Value of type 'MKMapItem' has no member 'website` in Swift 3“MKMapItem”类型的值在 Swift 3 中没有成员“网站”
【发布时间】:2017-11-09 21:26:35
【问题描述】:

我正在创建一个应用程序,其中有注释视图,当您单击注释视图时,它不会在视图控制器DetailsView 上显示注释视图网站网址,请查看我的代码并帮助我解决它显示注释视图位置的网站 URL。

这是我的代码:

import UIKit
import MapKit

protocol UserLocationDelegate {
    func userLocation(latitude: Double, longitude: Double)
}

class NearMeMapViewController: ARViewController, ARDataSource, MKMapViewDelegate, CLLocationManagerDelegate {

    var nearMeIndexSelected = NearMeIndexTitle()
    var locationManager: CLLocationManager!
    var nearMeARAnnotations = [ARAnnotation]()

    var nearMeRequests = [NearMeRequest]()
    var delegate: UserLocationDelegate!

    var place: Place?

    override func viewDidLoad() {
        super.viewDidLoad()

        self.title = nearMeIndexSelected.indexTitle

        self.locationManager = CLLocationManager()
        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.locationManager.distanceFilter = kCLHeadingFilterNone
        self.locationManager.requestWhenInUseAuthorization()
        self.locationManager.startUpdatingLocation()

        self.dataSource = self
        self.headingSmoothingFactor = 0.05
        self.maxVisibleAnnotations = 30

        getNearMeIndexSelectedLocation()
    }

    func getNearMeIndexSelectedLocation() {

        let nearMeRequest = MKLocalSearchRequest()
        nearMeRequest.naturalLanguageQuery = nearMeIndexSelected.indexTitle

        let nearMeregion = MKCoordinateRegionMakeWithDistance(self.locationManager.location!.coordinate, 250, 250)
        nearMeRequest.region = nearMeregion

        let nearMeSearch = MKLocalSearch(request: nearMeRequest)

        nearMeSearch.start{(response: MKLocalSearchResponse?, error: Error?) in

            for requestItem in (response?.mapItems)! {

                let nearMeIndexRequest = NearMeRequest()
                nearMeIndexRequest.name = requestItem.name
                nearMeIndexRequest.coordinate = requestItem.placemark.coordinate
                nearMeIndexRequest.address = requestItem.placemark.addressDictionary?["FormattedAddressLines"] as! [String]
                nearMeIndexRequest.street = requestItem.placemark.addressDictionary?["Street"] as! String!
                nearMeIndexRequest.city = requestItem.placemark.addressDictionary?["City"] as! String
                nearMeIndexRequest.state = requestItem.placemark.addressDictionary?["State"] as! String
                nearMeIndexRequest.zip = requestItem.placemark.addressDictionary?["ZIP"] as! String
                nearMeIndexRequest.phone = requestItem.phoneNumber
                nearMeIndexRequest.website = requestItem.website // This is where the error is at.

                self.nearMeRequests.append(nearMeIndexRequest)
                print(requestItem.placemark.name)
            }

            for nearMe in self.nearMeRequests {
                let annotation = NearMeAnnotation(nearMeRequest: nearMe)
                self.nearMeARAnnotations.append(annotation)
                self.setAnnotations(self.nearMeARAnnotations)
            }
        }
    }

    func ar(_ arViewController: ARViewController, viewForAnnotation: ARAnnotation) -> ARAnnotationView {

        let annotationView = NearMeARAnnotationView(annotation: viewForAnnotation)
        annotationView.frame = CGRect(x: 0, y: 0, width: 150, height: 50)

        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(_:)))
        annotationView.addGestureRecognizer(tapGesture)

        return annotationView
    }

    func tapBlurButton(_ sender: UITapGestureRecognizer) {

        if let annotationView = sender.view as? NearMeARAnnotationView {

            if let detailsVc = storyboard?.instantiateViewController(withIdentifier: "DetailsViewController") as? DetailsViewController {

                detailsVc.annotation = annotationView.annotation
                detailsVc.place = Place(location: (locationManager.location)!,
                                        reference: "",
                                        name: annotationView.annotationNameLabel.text ?? "",
                                        address: annotationView.annotationAddressLabel.text ?? "",
                                        phoneNumber: annotationView.phoneNumber.text ?? "",
                                        website: annotationView.website.text ?? "")

                self.navigationController?.pushViewController(detailsVc, animated: true)
            }
        }
    }

}

【问题讨论】:

    标签: ios swift mkmapitem


    【解决方案1】:

    MKMapItem 上没有网站资源。有一个 url 属性,但是它应该包含与该位置关联的网站。

    这是 Apple 的文档对地图项的 url 属性的评价。

    如果存在与该位置关联的相关 URL,例如该位置的企业 URL,请使用此属性指定该值。

    你的代码行:

    nearMeIndexRequest.website = requestItem.website
    

    应该改为:

    nearMeIndexRequest.website = requestItem.url.absoluteString
    

    【讨论】:

    • 我尝试通过url 属性来实现。但是,我被卡住了,所以我就这样做了,这就是为什么我在这里为你们提供帮助。你能告诉我用url属性正确实现它的正确方法吗?
    • 另外,我不想设置硬编码值。我想像我对 phoneNumber 所做的那样做......每当用户点击注释视图时,它都会显示将网站 url 放置在下一个视图控制器上。
    • 您想要网站的 URL 还是字符串?
    • 然后我将它从 var website :String! 更改为 var website: Url? 但它仍然不起作用..
    • 我要那个地方网站的网址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2018-03-24
    相关资源
    最近更新 更多