我在super.init()
行收到错误"Property‘self.directionsCompletionHandler’not initialized at super.init call"。在最近的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