因此,我想创建一个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 – 如何使用其超类的实例初始化我的子类?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)