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()
}
...
替换
fileprivate var directionsCompletionHandler:DirectionsCompletionHandler
与
fileprivate var directionsCompletionHandler: DirectionsCompletionHandler = nil
我建议不要将typealias
本身设置为可选,而只是简单的关闭:
typealias DirectionsCompletionHandler = (_ route: MKPolyline?, _ directionInformation: NSDictionary?, _ boundingRegion: MKMapRect?, _ error: String?) -> Void
这是定义闭包的类型别名时的标准约定。
然后定义您的directionCompletionHandler
以使可选行为明确:
fileprivate var directionsCompletionHandler: DirectionsCompletionHandler?
并且编译器可以很容易地确定它不需要初始化。
或者,当然,如果需要,您可以使此初始化显式:
fileprivate var directionsCompletionHandler: DirectionsCompletionHandler? = nil