微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift 何时/如何调用用户创建的函数

如何解决swift 何时/如何调用用户创建的函数

我目前正在学习如何使用 swift 进行编码。我创建了一个使用地图视图简单显示用户位置的应用。

在这代码中,swift 什么时候调用 locationManager() 函数?我似乎从来没有调用过这个函数,但它运行了其中的所有逻辑

import UIKit
import MapKit

class ViewController: UIViewController,CLLocationManagerDelegate{
    
    @IBOutlet weak var map: MKMapView!
    @IBOutlet weak var AreaLbl: UILabel!
    var locationManager = CLLocationManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.locationManager.requestWhenInUseAuthorization()
        if CLLocationManager.locationServicesEnabled(){
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
            locationManager.startUpdatingLocation()
        }
    }
    
    func locationManager(_ manager: CLLocationManager,didUpdateLocations locations: [CLLocation]) {
        let locValue:CLLocationCoordinate2D = manager.location!.coordinate
        print("locations = \(locValue.latitude) \(locValue.longitude)")
        let userLocation = locations.last
        let viewRegion = MKCoordinateRegion(center: (userLocation?.coordinate)!,latitudinalMeters: 600,longitudinalMeters: 600)
        self.map.showsUserLocation = true
        self.map.setRegion(viewRegion,animated: true)
        
    }

如果有任何你推荐的学习 swift 的资源,请告诉我!

解决方法

首先,程序问题。在 Swift 中,函数的名称包含参数。您的函数未命名为 locationManager()。它被命名为 locationManager(_:didUpdateLocations:)(一个未命名的参数和一个名为“didUpdateLocations”的参数。)

现在回答你的问题。

iOS 和 Mac OS 非常普遍地使用委托设计模式。在这种模式中,一个对象将自己设置为另一个对象的“委托”。这基本上意味着委托对象同意在电话旁等待来电。

当您是对象的委托人时,您同意响应可能发送给您的一组消息(或可能被调用的函数。)您“遵守协议”,该协议定义了您需要响应的消息.其中一些消息可能是必需的,而另一些可能是可选的。

调用您的函数的不是 Swift,而是操作系统。特别是位置经理。

您的 viewDidLoad() 函数包括 locationManager.delegate = self 行。

这使您成为位置经理的代表。这意味着您符合 CLLocationManagerDelegate protocol。它告诉位置管理器您已准备好接受来自该协议定义的位置管理器的消息(函数调用)。

当您这样做时,然后您告诉位置管理器开始使用 locationManager.startUpdatingLocation() 行更新您的位置,位置管理器将在以后某个时间检测到更改为设备的位置。

就是导致您的 locationManager(_:didUpdateLocations:) 函数被调用的原因。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。