【问题标题】:Cannot convert value of type 'ViewController?' to expected argument type '_OptionalNilComparisonType' [duplicate]无法转换“ViewController”类型的值?到预期的参数类型'_OptionalNilComparisonType' [重复]
【发布时间】:2018-09-24 10:33:25
【问题描述】:

我正在将MapKit 实现到我的应用程序中,我已经能够向用户显示当前位置。现在我正在尝试将当前街道名称和街道地址显示到我的故事板上的标签上,但我收到此错误::

无法转换“ViewController”类型的值?到这行代码中预期的参数类型“_OptionalNilComparisonType”

guard let self = self else { return }

下面是我的示例代码:

extension ViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    let center = getCenterLocation(for: mapView)
    let geoCoder = CLGeocoder()

    guard let previousLocation = self.previousLocation else { return }
    guard center.distance(from: previousLocation) > 50 else { return }
    self.previousLocation = center

    geoCoder.reverseGeocodeLocation(center) { [weak self] (placemarks, error) in
        guard let self = self else { return }

        if let _ = error {
            //TODO show alert informing the user
            return
        }

        guard let placemark = placemarks?.first else {
            //TODO Show alert informing the user
            return
        }

        let streetNumber = placemark.subThoroughfare ?? ""
        let streetName = placemark.thoroughfare ?? ""

        DispatchQueue.main.async {
            self?.addressLabel.text = "\(streetNumber) \(streetName)"
        }
    }
}
}

【问题讨论】:

  • guard case self = self else { return } - 您希望从这个表达式中得到什么结果?
  • 对不起,我更新了我的问题

标签: ios swift4.1


【解决方案1】:

更新到 Xcode 10 和 Swift 4.2。那是 Swift 的最早版本,其中的表达式

guard let self = self else { return }

是合法的。

如果您不能这样做,请在等号左侧使用其他变量名。例如:

guard let strongself = self else { return }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-06
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多