Swift 快速访问辅助功能视图
我试图从我的助手类访问函数“addNavBar()”,但当我运行模拟器时,HomeViewController上没有显示任何视图 斯威夫特4 HomeViewController.swiftSwift 快速访问辅助功能视图,swift,function,Swift,Function,我试图从我的助手类访问函数“addNavBar()”,但当我运行模拟器时,HomeViewController上没有显示任何视图 斯威夫特4 HomeViewController.swift class HomeController: UIViewController { let NavBar = NavigationBarHelper() override func viewDidLoad() { super.viewDidLoad() NavBar.addNavBar() }
class HomeController: UIViewController {
let NavBar = NavigationBarHelper()
override func viewDidLoad() {
super.viewDidLoad()
NavBar.addNavBar()
}
}
NavigationBarHelper.swift
class NavigationBarHelper: UIView {
func addNavBar() {
let rect = CGRect(x: 10, y: 70, width: 250, height: 100)
let navBarView = UIView(frame: rect)
navBarView.backgroundColor = UIColor.blue
self.addSubview(navBarView)
}
}
NavigationBarHelper中的
self
与视图控制器中的视图不是同一对象。将VC的视图作为参数传递。不需要使NavigationBarHelper成为UIView的子类(实际上它也可以是一个结构)
请遵守命名约定
class HomeController: UIViewController {
let navBarHelper = NavigationBarHelper()
override func viewDidLoad() {
super.viewDidLoad()
navBarHelper.addNavBar(to: self.view)
}
而不是每次使用都创建一个对象
let NavBar = NavigationBarHelper()
我认为像这样使它静态
更健壮
class NavigationBarHelper: UIView {
static func addNavBar(view:UIView) {
let rect = CGRect(x: 10, y: 70, width: 250, height: 100)
let navBarView = UIView(frame: rect)
navBarView.backgroundColor = UIColor.blue
view.addSubview(navBarView)
}
}
直接调用它而不创建对象
NavigationBarHelper.addNavBar(view: self.view)
更好的替代方法是
扩展
,因此不必为此创建特殊类
extension UIView {
func addNavBar() {
let rect = CGRect(x: 10, y: 70, width: 250, height: 100)
let navBarView = UIView(frame: rect)
navBarView.backgroundColor = UIColor.blue
self.addSubview(navBarView)
}
}
在您的UIViewController
中,您可以简单地编写它,而无需创建助手的对象
self.view.addNavBar()
您在twicesorry上发布了相同的代码片段。更正了,谢谢!像charme一样工作。是什么让它更健壮?创建无用的变量不是首选,而且这是实用程序类的最佳方法。但是,是什么让它更健壮呢?在面向对象语言中,创建对象不应该是一个问题。对象更容易通过,因此它们在测试环境中表现更好,并允许您遵循DIP原则。一般来说,我不会说它们是首选的。为什么将它添加到每个视图对象是一个更好的解决方案?将导航栏添加到标签或按钮有意义吗?
self.view.addNavBar()