Я хотел бы создать подкласс MKCircle
(например, MyCircle
), добавив еще одно свойство String, назовем его «code
». Это свойство не должно быть необязательным и постоянным, поэтому я должен установить его из инициализатора, верно? Конечно, MyCircle
также должен получить координату центра и радиус. Эти два свойства доступны только для чтения, поэтому мне также нужно установить их через инициализатор.
В итоге мне нужен инициализатор, который принимает 3 параметра: coordinate
, radius
и code
. Звучит довольно просто, но назначенные Swift и инициализаторы удобства и его правила доставляют мне неприятности.
Проблема заключается в определении MKCircle
:
class MKCircle : MKShape, MKOverlay, MKAnnotation, NSObjectProtocol {
convenience init(centerCoordinate coord: CLLocationCoordinate2D, radius: CLLocationDistance)
convenience init(mapRect: MKMapRect) // radius will be determined from MAX(width, height)
var coordinate: CLLocationCoordinate2D { get }
var radius: CLLocationDistance { get }
var boundingMapRect: MKMapRect { get }
}
Как видите, инициализатор MKCircle
, который принимает coordinate
и radius
, является удобным инициализатором и, следовательно, не вызывается из инициализаторов моего подкласса. Также свойства доступны только для чтения, поэтому я не могу установить их из инициализаторов моего подкласса или извне.
Я пробовал много вариантов, но кажется, что единственный работающий способ — сделать мое свойство code
необязательным, использовать унаследованный удобный инициализатор для установки координаты и радиуса, а затем установить свойство кода, например:
class MyCircle: MKCircle {
var code: String?
}
overlay = MyCircle(centerCoordinate: coord, radius: radius)
overlay.code = code
Я что-то пропустил? Есть ли способ определить один удобный инициализатор, который в этом случае принимает 3 аргумента?
Спасибо заранее! :)
title
иsubtitle
. - person   schedule 30.09.2014