Какой назначенный инициализатор для MKPolygon в Swift4? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь настроить класс, который наследует от MKPolygon, как показано ниже, но компилятор отклоняет мой вызов super.init() со следующим сообщением об ошибке:

Должен вызвать назначенный инициализаторсуперкласс 'MKPolygon'

Для чего предназначен инициализатор MKPolygon?

По совету этот ответ и этот Я изучил документацию .Доступно четыре инициализатора, но все они объявлены как удобные инициализаторы.

Я довольно новичок в Swift, поэтому я уверен, что что-то простое мне не хватает.

Моя реализация подкласса приведена ниже, на случай, если это поможет.

import MapKit
import UIKit

class AudioGuideRegionAnnotation: MKPolygon {

    // MARK: - Properties
    let color: UIColor
    let image: UIImage?

    // MARK: - Initializers
    init(region: AudioGuideRegion) {
        var locations = region.locations
        super.init(coordinates: &locations, count: locations.count) // <-- rejected with "Must call a designated initializer of the superclass 'MKPolygon'"
        self.title = region.title
        self.subtitle = "\(Int(round(Double(region.duration / 60)))) minutes"
        self.color = .black
        self.image = region.images.first?.image
        super.init()
    }
}

1 Ответ

0 голосов
/ 13 ноября 2018

Следуя полезному комментарию Мэтта выше, выясняется, что ответ в том, что MKPolygon и несколько других классов не имеют доступных назначенных инициализаторов.

В таком случае создание подклассов невозможно, и, похоже, единственным способом действий является расширение класса, который вы намеревались включить в подкласс.

Этот ответ , на который ссылается Мэтт, чрезвычайно полезен для дальнейшего чтения.

...