将Viewcontroller作为参数传递

3

我正在制作一个共享类。这个类将在我的项目中被多次使用。因此,我在其中定义了许多方法,其中有一个参数指定了要呈现的视图控制器的引用,例如SLComposeViewController。我只想问一件事,那就是将UIVIewController作为参数传递是否正常,或者不建议将UIVIewController作为参数传递

// ViewController Class
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func shareFacebook(sender: UIButton) {
let sharePanelObj = SharePanel()
sharePanelObj.facebookShare(self)
    }

    @IBAction func shareTwitter(sender: UIButton) {
    }
}


// Reusable Base Class
class SharePanel: NSObject {

    func facebookShare (refrenceViewController:UIViewController) -> () {
        if SLComposeViewController.isAvailableForServiceType(SLServiceTypeFacebook) {
            let fbShare:SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)

            refrenceViewController.presentViewController(fbShare, animated: true, completion: nil)

        } else {
            let alert = UIAlertController(title: "Accounts", message: "Please login to a Facebook account to share.", preferredStyle: UIAlertControllerStyle.Alert)

            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
            refrenceViewController.presentViewController(alert, animated: true, completion: nil)
        }
    }
}

2
展示代码,解释你正在做什么以及为什么要传递它。是控制器传递自身以便从中呈现某些内容吗? - Wain
你想为应用程序创建一个基类,以便在不同的控制器中调用相同的方法吗?就像这样? - Jigar Tarsariya
2个回答

4

发送viewviewController作为参数在这种情况下我没有看到任何问题,但将这些方法作为UIViewControllerextensions可能更加清晰,然后您可以仅对self进行操作,而不是参数。

需要考虑的一件事可能是内存管理,如果保留对视图控制器的引用,那么加载和卸载视图可能会出现问题,而这些视图通常依赖于设置视图。


1
是的,添加扩展名会更清晰。谢谢 :) - ankit

2

1) 创建一个名为BaseViewController的控制器。

2) 编写所有你想在其他控制器中重复使用的通用方法。

3) 然后将此基础视图控制器作为父视图控制器赋给你想要使用其方法的那个视图控制器,例如:

class HomeViewController: BaseViewController
{

}

你可以将这个基类赋予所有需要重复使用这些方法的控制器。 这样,你就可以实现基类概念。希望这能对你有所帮助。

1
尽可能避免子类化。随着代码的增长,这将变得非常难以维护,因此您将处理一系列子类和未使用的方法。 - RealNmae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接