我有一個UIView
加載某些類型和名稱的筆尖的延伸:獲取實際類型從一個普通的返回類型
extension UIView {
class func fromNib<T : UIView>() -> T? {
guard let nib = Bundle(for: T.self).loadNibNamed(String(describing: T.self), owner: nil, options: nil)?[0]
else {
return nil
}
return nib as? T
}
}
現在在我的Hint
類(這是一個子類UIView
)我用上面的延伸是這樣的:
if let view = Hint.fromNib(){
self.addSubview(view)
view.frame = self.bounds
}
這不起作用,因爲T.self
結果總是UIView的,即使有一絲類是什麼fromNib
方法被調用。如果我嘗試像這樣硬編碼類:
Bundle(for: Hint.self).loadNibNamed(String(describing: Hint.self), owner: nil, options: nil)
然後一切正常。如何獲得實際調用fromNib()
方法的類的類型名稱?
這裏是我的提示類:
class Hint:UIView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
if let view = UIView.fromNib(){
self.addSubview(view)
view.frame = self.bounds
}
}
override init(frame: CGRect) {
super.init(frame: frame)
if let view = UIView.fromNib(){
self.addSubview(view)
view.frame = self.bounds
}
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
if let view = UIView.fromNib(){
self.addSubview(view)
view.frame = self.bounds
}
}
}
所以一切都非常簡單。一個nib文件只有一個標籤和一個圖像視圖,但我認爲這與當前問題幾乎無關。
嘗試'讓提示:提示= UIView.fromNib()'。我遇到了同樣的問題。 – EmilioPelaez
您是否曾嘗試在調用方法之前定義類型?即如果'讓視圖:提示= Hint.fromNib()' –
哎呀..埃米利奧以10秒爲 –