Swift super.init()-属性在super.init调用时未初始化

问题描述 投票:0回答:2

super.init()行出现错误“在super.init调用时未初始化属性'self.directionsCompletionHandler'”。直到最近的Xcode更新(11.4)为止,此方法均能正常工作。卸下init()super.init()也会导致错误。我不太确定它要我做什么。

import UIKit
import CoreLocation
import MapKit

typealias DirectionsCompletionHandler = ((_ route:MKPolyline?, _ directionInformation:NSDictionary?, _ boundingRegion:MKMapRect?, _ error:String?)->())?

class MapManager: NSObject{

    fileprivate var directionsCompletionHandler:DirectionsCompletionHandler
    fileprivate let errorNoRoutesAvailable = "No routes available"// add more error handling

    override init(){
        super.init()
    }

    ...
ios swift class init
2个回答
0
投票

替换

fileprivate var directionsCompletionHandler:DirectionsCompletionHandler

fileprivate var directionsCompletionHandler: DirectionsCompletionHandler = nil

0
投票

我建议不要将typealias本身设置为可选,而只是简单的关闭:

typealias DirectionsCompletionHandler = (_ route: MKPolyline?, _ directionInformation: NSDictionary?, _ boundingRegion: MKMapRect?, _ error: String?) -> Void

这是定义闭包的类型别名时的标准约定。

然后定义您的directionCompletionHandler以使可选行为明确:

fileprivate var directionsCompletionHandler: DirectionsCompletionHandler?

并且编译器可以很容易地确定它不需要初始化。

或者,当然,如果需要,您可以使此初始化显式:

fileprivate var directionsCompletionHandler: DirectionsCompletionHandler? = nil
© www.soinside.com 2019 - 2024. All rights reserved.