【发布时间】:2020-12-05 03:44:49
【问题描述】:
我正在尝试将一些 swift 函数转换为 Objective-c
extension UIView {
class func fromNib<T: UIView>() -> T {
return Bundle(for: T.self).loadNibNamed(String(describing: T.self), owner: nil, options: nil)![0] as! T
}
}
这是来自Load a UIView from nib in Swift的代码
我以为.h文件可以这样写
@interface UIView <T: UIView *> (MyCommon)
+ (T) loadFromNib;
@end
我遇到了这样的错误
非参数化类 'UIView' 的类别不能有类型参数
这是否意味着在 Objective C 中使用 Generic 实现 UIView 扩展功能是不可能的?
【问题讨论】:
-
我认为您正在寻找一个类别,看看这个answer
-
@skaak 谢谢你的推荐。我帮了很多忙。除此之外,我想限制像
<T: UIView>这样的泛型类型。但我只能找到通用T。你能给我更多的建议吗? -
好的,在那个答案中,代码的开头是这样的
+ (id)loadFromNib:(NSString *)name classToLoad:(Class)classToLoad {,只需将其替换为+ (UIView*)loadFromNib:(NSString *)name classToLoad:(Class)classToLoad {...我认为这里的泛型是矫枉过正的。id表示任何东西,更改为UIView表示它必须是 UIView 或子类。
标签: objective-c swift generics uiview extension-methods