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



我在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

最新更新