Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 快速访问辅助功能视图_Swift_Function - Fatal编程技术网

Swift 快速访问辅助功能视图

Swift 快速访问辅助功能视图,swift,function,Swift,Function,我试图从我的助手类访问函数“addNavBar()”,但当我运行模拟器时,HomeViewController上没有显示任何视图 斯威夫特4 HomeViewController.swift class HomeController: UIViewController { let NavBar = NavigationBarHelper() override func viewDidLoad() { super.viewDidLoad() NavBar.addNavBar() }

我试图从我的助手类访问函数“addNavBar()”,但当我运行模拟器时,HomeViewController上没有显示任何视图

斯威夫特4

HomeViewController.swift

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()