Swift super.init () - свойство не инициализируется при вызове super.init - PullRequest
0 голосов
/ 25 марта 2020

Я получаю сообщение об ошибке "Свойство 'self.directionsCompletionHandler' не инициализировано при вызове super.init" в строке super.init(). Это работало нормально вплоть до самого последнего обновления 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()
    }

    ...

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Я бы предложил не делать typealias само по себе необязательным, а просто простым замыканием:

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

Это стандартное соглашение при определении typealias для замыкания.

А затем определите ваш directionCompletionHandler, чтобы сделать необязательное поведение явным:

fileprivate var directionsCompletionHandler: DirectionsCompletionHandler?

И компилятору не составит труда выяснить, что его не нужно инициализировать.

Или, конечно, вы можете сделать эту инициализацию явной, если хотите:

fileprivate var directionsCompletionHandler: DirectionsCompletionHandler? = nil
1 голос
/ 25 марта 2020

Заменить

fileprivate var directionsCompletionHandler:DirectionsCompletionHandler

на

fileprivate var directionsCompletionHandler: DirectionsCompletionHandler = nil
...