ios - 协议(protocol)或 BaseViewController

标签 ios swift protocols

我必须建立一个必须包含多个目标的项目。目标是拥有一个代码库,以便与稍后创建的所有目标共享它。我举一个例子:我将有一个用于登录的 UIViewController,但这对于每个目标来说都是不同的。我的想法是拥有一个与每个特定的 LoginViewController 共享的代码库。构建代码的最佳方法是什么?我开始编写一个协议(protocol),如下:

protocol LoginProtocol {

    weak var txtUsername: UITextField? { get set }
    weak var txtPassword: UITextField? { get set }
    weak var btnLogin: UIButton? { get set }

    func login()
}

这个想法是在每个 Controller 中实现这个协议(protocol)。

另一种方法是编写一种基本 View Controller ,其他所有 Controller 都将从中继承。像这样:

// MARK: - Instance vars and IBOutlets

class LoginViewController: UIViewController {

    @IBOutlet weak var txtUsername: UITextField?
    @IBOutlet weak var txtPassword: UITextField?
    @IBOutlet weak var btnLogin: UIButton?


    override func viewDidLoad() {
        super.viewDidLoad()


    }
}

extension LoginViewController {

    func login() {

        print("Hello")
    }
}

你觉得怎么样?从架构上来说,最好的选择是什么?

最佳答案

很难“回答”这个问题,因为这在某种程度上是意见......但这是我的意见:

我认为这可以归结为常见的行为:如果您使用协议(protocol),但随后感觉每次实现它时都编写几乎相同的代码......那么您可能需要一个基类。我喜欢协议(protocol)并大量使用它们,但我认为现在人们很快就放弃了基类。 (有利有弊,但很多人不假思索地盲目制定协议(protocol)。)

我有时会使用具有委托(delegate)的基类的混合体来“配置”某些部分。

关于ios - 协议(protocol)或 BaseViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48651977/

相关文章:

android - 在 Android 上自定义转换远程显示 session

swift - 3 个不同的按钮和 1 个按钮中的操作

objective-c - 类名含义后的人字形语句

iphone - 当我将触摸事件传递给 super View 时,MyScrollView 不响应触摸

linux - 如何解码 H323 数据包?

ios - 为什么在 swift 5 中更改 Root View 时看不到启动(启动)屏幕?

ios - 从数组中获取独特的年份

iOS 自动补全不适用于 RxCocoa Xcode 8.3

ios - 如何去除文本框的黑色边框?

swift - 基于种子 Swift 3 生成随机值