ios – 如何使用其超类的实例初始化我的子类?

ios – 如何使用其超类的实例初始化我的子类?,第1张

概述在我的应用程序中,我阅读了EKEvent类型的日历事件,并且我已经使用大量计算变量进行了扩展,因此我可以轻松获得日历中每个事件的持续时间,工时等数量.但是在大规模中,性能很差 – 所以我想使用lazy vars来缓存我所有的额外数据. 因此,我想创建一个EKEvent的子类 – 名为CustomEvent,它添加了懒惰的变量,但我的问题是EKEventStore总是返回EKEvents,我需要将它 在我的应用程序中,我阅读了EKEvent类型的日历事件,并且我已经使用大量计算变量进行了扩展,因此我可以轻松获得日历中每个事件的持续时间,工时等数量.但是在大规模中,性能很差 – 所以我想使用lazy vars来缓存我所有的额外数据.

因此,我想创建一个EKEvent的子类 – 名为CustomEvent,它添加了懒惰的变量,但我的问题是EKEventStore总是返回EKEvents,我需要将它转换为我的CustomEvent子类的实例,以便能够访问懒惰的vars等

一个简单的类型转换是不够的,我已经在 *** 场上试过,看看哪些可行,但没有任何用处.我需要一个Customrectangle的特殊构造函数,它可以从NativeRectangle初始化一个Customrectangle.另一种解决方案是创建一个包装类,将原始对象保存为属性,但这不是我最喜欢的解决方案,因为我必须映射所有方法和属性

class NativeRectangle: NSObject {    var wIDth: Int    var height: Int    init(wIDth: Int,height: Int) {        self.wIDth = wIDth        self.height = height        super.init()    }}class Customrectangle: NativeRectangle {    var area: Int { return wIDth * height}}let rect = NativeRectangle(wIDth: 100,height: 20)let customrect = Customrectangle(rect) // This fails,i need a constructorprint(customrect.area)
解决方法 在创建子类实例时,Swift(通常在大多数面向对象语言中)无法使用基类对象的现有实例.

从一般编程角度来看,在这种情况下您有两种选择:

>使用组合:使Customrectangle包含一个NativeRectangle,并将所有方法转发给您需要的方法.
>使用地图将NativeRectangles链接到其他信息.在Objective C和Swift中,您可以使用objc_AssociationPolicy来最轻松地拥有这样的内部地图.见https://stackoverflow.com/a/43056053/278842

顺便说一句.你无法通过“缓存”一个简单的计算作为宽度*高度来看到任何加速.

总结

以上是内存溢出为你收集整理的ios – 如何使用其超类的实例初始化我的子类?全部内容,希望文章能够帮你解决ios – 如何使用其超类的实例初始化我的子类?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存