微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 在Swift中对MKCircle进行子类化

我想通过添加一个String属性来继承MKCircle(例如MyCircle),我们称之为“代码”.这个属性不是可选的和常量的,所以我必须从初始化器设置它,对吧?当然MyCircle也应该得到中心坐标和半径.这两个属性是只读的,所以我还需要通过初始化程序设置它们.

最后我需要一个初始化器,它有3个参数:坐标,半径和代码.听起来很简单,但Swifts指定和便利的initalizers及其规则让我很难在这里.

问题是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的初始化器采用坐标和半径是一个方便的初始化器,因此无法从我的子类的初始化器调用.此属性也是只读的,因此我无法从子类的初始值设置器或外部设置它们.

我尝试了很多变化,但似乎唯一可行的方法是使我的代码属性成为可选,使用继承的便利初始化程序来设置坐标和半径,然后设置代码属性,如下所示:

class MyCircle: MKCircle {
    var code: String?
}

overlay = MyCircle(centerCoordinate: coord,radius: radius)
overlay.code = code

我错过了什么?有没有办法定义一个单一的便利初始化器,在这种情况下需要3个参数?

提前谢谢了!

原文地址:https://www.jb51.cc/iOS/331447.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐