簡體   English   中英

Swift super.init() - 屬性未在 super.init 調用中初始化

[英]Swift super.init() - Property not initialized at super.init call

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM