加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 如果我是一个类的子类,我可以指定一个实例变量的某个子

发布时间:2020-12-14 04:25:41 所属栏目:百科 来源:网络整理
导读:我有一个NSObject子类,BaseClass. BaseClass是几个子类SubClassA和SubClassB的占位符类.我在两个子类上都有一个实例变量.它们是相同的名称,并且都是另一个对象的相应子类.它们经常以非常相似的方式使用,所以我想将一些功能从SubClassA和SubClassB移到BaseCla
我有一个NSObject子类,BaseClass. BaseClass是几个子类SubClassA和SubClassB的占位符类.我在两个子类上都有一个实例变量.它们是相同的名称,并且都是另一个对象的相应子类.它们经常以非常相似的方式使用,所以我想将一些功能从SubClassA和SubClassB移到BaseClass.但是,我需要访问该变量.

如果我将变量移动到BaseClass中,我无法在SubClassA和SubClassB中指定它的正确子类,说我无法覆盖它.如果我在BaseClass中使用此实例变量的公共父类,我将失去对SubClassA和SubClassB如何工作之间不常见的事物的访问权限.

这是一个更原始的例子,但是我正在尝试做的基础知识.这个例子显然不起作用.我唯一的选择是选择在SubClassA和SubClassB中定义常用功能还是有正确的方法来实现我的目标?

class BaseClass: NSObject {
    var myObject: MyObject
}

class SubClassA: BaseClass {
    override var myObject: MyObjectA
}

class SubClassB: BaseClass {
    override var myObject: MyObjectB
}

class MyObject: NSObject { }

class MyObjectA: MyObject { }

class MyObjectB: MyObject { }

这给了我错误:

Property ‘myObject’ with type ‘MyObjectA’ cannot override a property with type ‘MyObject’

解决方法

如何使用通用?为简单起见,我删除了NSObject

class MyObject {

}

class MyObjectA: MyObject {

}

class MyObjectB: MyObject {

}

class BaseClass<T> where T : MyObject {
    var myObject: T?
}

class SubClassA: BaseClass<MyObjectA> {
}

class SubClassB: BaseClass<MyObjectB> {
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读