首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中将MKCircle子类化

在Swift中将MKCircle子类化
EN

Stack Overflow用户
提问于 2014-09-30 17:30:28
回答 2查看 1.5K关注 0票数 8

我想通过添加另一个字符串属性来继承MKCircle (例如MyCircle),让我们称之为"code“。这个属性不应该是可选的常量,所以我必须从初始化器设置它,对吗?当然,MyCircle也应该得到中心坐标和半径。这两个属性是只读的,所以我还需要通过初始化器来设置它们。

最后,我需要一个带有3个参数的初始化器:coordinateradiuscode。听起来很简单,但是Swift指定的和方便的初始化器和它的规则让我在这里很艰难。

问题是MKCircle的定义

代码语言:javascript
复制
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 }
}

正如您所看到的,接受coordinateradiusMKCircle初始化器是一个方便的初始化器,因此不能从我的子类的初始化器中调用。此外,属性是只读的,所以我不能从我的子类的初始化器或外部设置它们。

我尝试了许多变体,但似乎唯一有效的方法是将我的code属性设为可选,使用继承的方便初始化器来设置坐标和半径,然后设置代码属性,如下所示:

代码语言:javascript
复制
class MyCircle: MKCircle {
    var code: String?
}

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

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

非常感谢!:)

EN

回答 2

Stack Overflow用户

发布于 2015-02-03 04:25:19

比你的解决方案好不了多少,只是包装一下:

代码语言:javascript
复制
class MyCircle: MKCircle {
    var code: String!

    class func circleAtCenterCoordinate(coord: CLLocationCoordinate2D, radius: CLLocationDistance, code: String)->MyCircle {
        let circ=MyCircle(centerCoordinate: coord, radius: radius)
        circ.code=code
        return circ
    }
}

并像这样使用它:

代码语言:javascript
复制
let circ=MyCircle.circleAtCenterCoordinate(CLLocationCoordinate2D, radius: CLLocationDistance, code: String)

这可能是基础类子类化的一件烦人的事情。

票数 3
EN

Stack Overflow用户

发布于 2019-03-06 20:10:10

代码语言:javascript
复制
class MyCircle: MKCircle {

    private(set) var code: String?

    private override init() {
        super.init()
    }

    static func Instance(center: CLLocationCoordinate2D, radius: CLLocationDistance, code: String?) -> MyCircle {
        let instance = MyCircle(center: center, radius: radius)
        instance.code = code
        return instance
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26117350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档