【发布时间】:2014-11-24 21:01:33
【问题描述】:
我想通过添加另一个字符串属性来继承MKCircle(例如MyCircle),我们称之为“code”。这个属性不应该是可选的和常量,所以我必须从初始化器中设置它,对吧?当然MyCircle 也应该得到中心坐标和半径。这两个属性是只读的,所以我还需要通过初始化器来设置它们。
最后我需要一个带有 3 个参数的初始化程序:coordinate、radius 和 code。听起来很简单,但 Swifts 指定和便利的初始化程序及其规则让我很难过。
问题是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 属性设为可选,使用继承的便利初始化程序设置坐标和半径,然后设置 code 属性,如下所示:
class MyCircle: MKCircle {
var code: String?
}
overlay = MyCircle(centerCoordinate: coord, radius: radius)
overlay.code = code
我错过了什么吗?在这种情况下,有没有办法定义一个接受 3 个参数的便利初始化器?
提前非常感谢! :)
【问题讨论】:
-
这并不能回答您的主要问题,但是:MKCircle 已经有两个从 MKShape 继承的字符串属性:
title和subtitle。
标签: ios inheritance swift mapkit initializer