gpt4 book ai didi

ios - 类的可重用代码

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:58 25 4
gpt4 key购买 nike

我的应用程序中的几个类执行相同的操作并具有相同的实例变量:

// one of the many classes I have
// they all load nibs and update the frames of their views
class HelpView: UIView {
@IBOutlet var view: UIView!

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
NSBundle.mainBundle().loadNibNamed("HelpView", owner: self, options: nil)
self.addSubview(self.view)
self.view.frame = self.bounds
}
}

我想避免重复代码,所以我考虑使用父类(super class),以便所有类都继承自它。

// my new superclass all classes will inherit from
class ReusableView: UIView {
@IBOutlet var view: UIView! // all subclasses have different views

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!

// every class has a different nib name
NSBundle.mainBundle().loadNibNamed("Nib name goes here", owner: self, options: nil)
self.addSubview(self.view)
self.view.frame = self.bounds
}
}

问题是在加载 nib 之前 viewnil,因此显然不可能调用该父类(super class)的方法,因为您传递的是 nil 对象。我该如何处理?

最佳答案

这会起作用:

class ReusableView: UIView {

func getHelperView() -> UIView! {
preconditionFailure("This method must be overridden")
}

func getNibName() -> String {
preconditionFailure("This method must be overridden")
}

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!

// every class has a different nib name
NSBundle.mainBundle().loadNibNamed(self.getNibName(), owner: self, options: nil)
self.addSubview(self.getHelperView())
self.getHelperView().frame = self.bounds
}
}

class HelpView: ReusableView {
@IBOutlet var view: UIView!

override func getHelperView() -> UIView! {
return view;
}

override func getNibName() -> String {
return "NibName";
}
}

关于ios - 类的可重用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37679203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com