是否可以通过泛型类传递属性?

时间:2017-01-11 12:38:49

标签: ios iphone swift generics swift3

我想要实现的是拥有一个透明的"统一类,它可以包含满足许多条件的许多类中的一个项(其中一个是从UIView继承)。透明的意思是,如果我向这个泛型类询问它不包含的属性(直接),它会检查其中的项是否自动包含该属性。如果没有,我不确定如何更好地描述这个 例如,所以这就是我想要实现的目标。

而不是:

objectOfGenericClass.itemInside.center

我想要这个:

objectOfGenericClass.center

在泛型类中没有荒谬的重复代码,如下所示:

public var center:CGPoint{
    return itemInside.center
}

如果我需要更具体,请提出问题,但我可能会在会议中花费几个小时(当我回来时会删除这一点)

2 个答案:

答案 0 :(得分:1)

您似乎习惯了动态语言的功能。欢迎来到静态世界!在这里,所有签名都必须在编译时知道。

这应该从根本上回答你的问题:不,你想要什么(自动调度)是不可能的。

在Swift中调度并非易事。 This似乎是一个不错的概述。

答案 1 :(得分:0)

当我假设您想要以下内容时,我是否正确理解您的问题?

class A // could e.g. be UIView
{
protected:
    int a1;
    int a2;
};

class B : A
{
protected:
    int b1;
    int b2;
};

class C : A
{
protected:
    int c1;
    int c2;
};


class GenericClass : public B, public C
{
    /* ... */
};

.....

GenericClass myObject();

int some_a1 = myObject.a1; // get members of other classes..
int some_a2 = myObject.a2;

如果GenericClass是从C类和B类派生(继承),并且您要求的类成员是公共的或受保护的(非私有的),则上述情况是唯一可能的。私有成员不适用于派生类。然而,人们必须非常小心钻石问题(https://en.wikipedia.org/wiki/Multiple_inheritance),并且不应该(我个人认为)不鼓励这种情况。

但是,按照我理解你的问题的方式,这确实提供了解决方案。

没有继承,这是不可能的。人们不能轻易地检索一个班级的列表。成员,请参阅:How to get a list of a class's member variables in C++?