gpt4 book ai didi

ios - 在 Swift 中继承 MKCircle

转载 作者:IT王子 更新时间:2023-10-29 05:53:07 27 4
gpt4 key购买 nike

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

最后,我需要一个带有 3 个参数的初始化器:coordinateradiuscode。听起来很简单,但 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 的初始化器采用 coordinateradius 是一个方便的初始化器,因此不能从我的子类的初始化器中调用.此外,这些属性是只读的,因此我无法从我的子类的初始值设定项或外部设置它们。

我已经尝试了很多变体,但似乎唯一可行的方法是使我的 code 属性成为可选属性,使用继承的便利初始化程序来设置坐标和半径并设置 code 属性之后,像这样:

class MyCircle: MKCircle {
var code: String?
}

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

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

非常感谢! :)

最佳答案

并不比你的解决方案好多少,只是它的包装器:

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
}
}

并像这样使用它:

let circ=MyCircle.circleAtCenterCoordinate(CLLocationCoordinate2D, radius: CLLocationDistance, code: String)

这可能是子类化 Foundation 类的烦人的事情之一。

关于ios - 在 Swift 中继承 MKCircle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26117350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com