首先要做的事情......已经投票结束了为什么你不能直接在Interface Builder中使用Generics的复制品。 TLDR的答案是IB使用Objective-C而Objective-C不支持泛型。那个也没有办法指定一个通用的专业' (无论如何使用它)。这是理解并且完全合理的。
然而,这个问题是为什么你不能使用泛型的子类,它完全定义了泛型的专业,所以IB不需要知道任何关于泛型的东西,甚至一个是首先使用。
考虑以下课程......
class MyView : UIView
{
}
我们可以通过拖出视图,然后将其类类型更改为MyView
,轻松地在Interface Builder中使用此类。实例化时,MyView
的init-with-coder按预期调用。
现在考虑这些类......
class MyGenericView<T> : UIView
{
}
class MyView : MyGenericView<String>
{
}
在这种情况下,即使MyView
基于具体类型MyGenericView<String>
,它本身基于UIView
,但您无法使用Interface Builder中的这个类。但为什么?这是一个完全限定的类,它是UIView
的子类,但是应用程序警告它找不到指定的类。
值得注意的是,为了澄清我的问题,我的理解是
MyView
这里不是Generic。它是一个完全定义的具体类型,可以直接从其类名实例化,最终基于NSObject(通过UIView),所以看起来它应该与Objective-C / IB完全兼容,但是没有&# 39;似乎是这种情况。我试图了解为什么,因为我的理解是 Generics是编译器功能,而不是运行时功能 意味着他们被编译到非通用对象,但我可能是错的。
所以......这是一个错误吗?如果没有,有人可以详细说明为什么这个特定场景没有按预期工作,从技术角度解决我提到的编译器/运行时观察?