更改UIViewController但保持行为

大家好,我今年学到了很多东西,例如代码审查,测试,视图代码等等。 这可能是我今年的最后一篇文章,我决定谈论我在上一个项目中看到的非常有趣的事情。

您可能已经不得不更改任何项目的某些UI,可能只是几个标签或该项目上的每个视图都非常棘手。 而且,如果有一种方法,我们可以从头开始构建新的UI,并且仍然与我们以前的UI兼容。

我们的挑战是建立一个可以轻松地使用新UI进行自定义的框架,但是它需要保持逻辑不变,当我说新UI时,我的意思是全新的UIViewController

我们如何创建能够处理该问题的体系结构? 例如,我们如何接收由情节提要,视图编码或黑魔法实例化的自定义UIViewController并仍对用户进行身份验证?

为了实现这一点,我们需要将自己的逻辑划分为多个文件,并承担各自的职责,并牢记它们的依赖性,例如, LoginViewController应该具有usernamepasswordlogin方法。

首先,我们需要承担login责任并将其移至实际上将执行身份验证过程的另一个类。 这消除了ViewController的责任,使其与我们的验证逻辑解耦。

让我们创建一个可以做到这一点的协议:

请注意,我们的LoginView都没有实际验证我们的用户,他们都收到一个布尔值,该值指示用户是否已验证。 身份验证过程将由我们的代表完成,可以通过许多不同的方式实现。 在这里,我们将创建一个将实现LoginActionscoordinator LoginActions

我们的协调器start方法返回一个LoginViewController ,它可以由故事板文件创建,以视图编码或以其他方式注入。 在此示例中,它将负责验证我们的用户,但可以从中删除此责任并放入另一个文件。

从我们的UIViewController消除职责使它高度可定制,与任何逻辑分离,更易于测试,可读性和更清洁。 只是不要忘记将依赖项保留在基类中,在任何实现中都将需要它们。

附:如果您喜欢这篇文章,请在Twitter上分享,或在中级推荐,或两者都=)。 这确实有助于我吸引更多人。 非常感谢。