对iOS应用程序进行编码是一项艰巨的工作,因此,开发人员想偷工减料并找到使他们的应用程序尽快上线的方法就很有意义。 但是成功的应用程序将存在很长一段时间,这意味着需要多年的错误修复,功能增强以及与其他编码人员的合作。
在本文中,我将分享三个要在iOS开发期间避免的事情,这将使您的应用程序更易于构建和维护。
1.不要害怕常量
虽然变量似乎比常量更通用,但是当您可以使用常量代替时,默认为变量仍然不是一个好主意。 那么常数到底有什么好呢? 实际上有很多东西!
可读性
关于常量的最好的事情之一就是它们的可读性。 让我们看一个例子:您正在编写一个电子商务类型的应用程序。 您可能希望将本地销售税税率提高8.75%,但其他开发人员不知道该数字意味着什么。 让我们看一个例子:
一名名为Steven的开发人员加入了您的团队,他是一名忍者,但他居住在国外。 在这个国家,没有营业税(幸运的史蒂文)之类的东西,因此,他对此一无所知。
如果您要为销售税率使用变量,则他可以只用一行代码来更改它,其结果可能会严重损害您的应用程序。 只要将关键字从var
更改为let
,编译器就会告诉他该值不能更改,并且他会意识到您希望它是不变的。
价值参考
let
有用的另一种方法是在代码中引用一个值。 如果要制作应用程序,则可能需要某种配色方案。 您可以使用常量来引用该特定颜色,而不必在需要的地方复制粘贴颜色。
这样,如果您要更改颜色,则只需要在一个地方进行更改,而不必查找每个与颜色有关的参考,而是多次更改。
类或结构实例化
创建单例时,还需要创建该类的共享实例。 通常,您可以通过在类声明中声明一个static let
来做到这一点。 之后,您将命名该常量并将其分配给该类的实例,并在整个应用程序中使用它。
除此之外,如果您需要实例化一个常规类(创建一个实例),也许在ViewController.swift中 ,您将创建一个常量并将其分配给所需类的实例,从而为您提供一个引用,您可以轻松地利用整个文件。 这是常量的另一种很好的用法。
如您所见,常量很大的原因很多。 它们提高了代码的可读性,对于存储不可变值很有用,并且显然,它们并没有您想像的那样无用。 通过养成尽可能使用常量的习惯来帮自己一个忙,只有在绝对需要改变它们的值时才将它们更改为变量,这将使您成为更好的程序员。
2.不要强行打开可选包装
可选选项是Swift的一项非常强大的功能。 它们只是int
和String
之类的类型,在类型声明后带有问号。 如果要将变量声明为可选字符串,则只需编写:
var someVariable: String?
这告诉编译器可能有一个值,也可能根本没有任何值。 String?
和String
被认为是两种不同的类型。
将可选件视为礼品盒。 正如我提到的那样,此礼品盒可能没有值,如果要查找,则必须先打开可选包装。 有很多方法可以做到这一点:
错误的方法
强制展开
该操作(使用感叹号执行)称为Bang运算符。 不要使用它! 强制展开变量从来都不是一个好主意。 如果您尝试解开的Optional的值为nil(无),则您的应用将崩溃,谁想要呢? 无论如何,让我们看下面的代码块:
var someVariable: String?
var somethingElse: String = "hello"
func setupApp() {
self.somethingElse = self.someVariable!
}
在此示例中,该应用程序将崩溃,因为我们从未为someVariable
定义值, someVariable
试图将其分配给String
类型的变量。 这破坏了可选对象的全部目的,这些可选对象可帮助保护我们免受此类错误的影响!
让我们看一下处理这种情况的一些正确方法。
正确的方式
可选装订
这是处理可选的最流行的方法之一。 在此方法中,您只需使用if
语句将可选值分配给常量。 如果可以打开可选的包装,则编译器进入闭包,您可以使用创建的常量。 否则,您陷入else
语句中并假装什么也没有发生。 让我们看一个例子:
var someVariable: String?
var somethingElse: String = "hello"
func setupApp() {
if let theThing = someVariable {
self.somethingElse = self.someVariable!
} else {
print("error")
}
}
使用与上次相同的示例,但是使用可选绑定,我们可以看到编译器输入了else语句并输出“错误”,而不是崩溃。
可选链接
安全拆开可选对象的另一种常见方法是可选链接。 这是在一行代码中干净地避免nil值的好方法。 当您使用此方法并遇到nil值时,该行代码将停止执行。 这是一个例子:
var someClass: SomeClass? = SomeClass()
var somethingElse: String?
func setupApp() {
self.somethingElse = someClass?.createString()
}
基本上,如果 someClass
为nil,则整个行将不执行, somethingElse
的值将变为nil。 如果有一个值(如上面的示例),它将被分配给变量somethingElse
。 无论哪种情况,应用程序都不会崩溃。
零合并
此方法用单行处理可选内容,但是与上述方法不同,您需要提供默认或“其他”大小写(如果可选结果为nil)。 让我们看一个例子:
var someVariable: String?
var somethingElse: String = "hello"
func setupApp() {
self.somethingElse = someVariable ?? "error"
}
尽管这似乎有些神秘,但这仅表示如果左侧语句具有值(换句话说,不是nil),它将被使用。 如果为nil,则将使用默认语句-在这种情况下,将使用硬编码字符串。 值得注意的是右手声明 必须为非null和非可选类型(否则,这样做的目的将被打败)。
3.不要忽视架构
另一个常见的错误是无法以可持续,可维护和高效的方式来构造代码。 许多人将所有代码都塞进ViewController
类中,这会使您的代码难以更改和调试。
听起来有些陈词滥调,但这确实是您对应用进行编程的基础。 假设您正在盖房,梦想中的家。 这所房子高五层,因此,如果您没有建立坚实的基础并遵循蓝图,它可能只会倒塌。
iOS应用程序的基础是您选择的设计模式。 让我们看两个最常用的模式。
MVC(模型-视图-控制器)
Model-View-Controller或MVC设计模式将代码的每个部分分为三部分:模型,视图和控制器。
- 模型:模型本质上是应用程序的数据。 这处理诸如可重用结构和类之类的事情 只要 与应用程序的数据。 该模型不处理与视图或信息如何显示给用户有关的任何内容。
- 视图:视图仅负责数据的视觉表示,并且还处理用户交互。 它不 处理有关数据的任何事情,也不处理特定的视图。 它只是一个可重用的类,可以重复使用多次而无需重复代码。
- 控制器:控制器是老板。 它从模型中获取数据,然后将其发送到视图,最后将其显示给用户。 这通常在ViewController.swift中 ,它侦听输入并根据需要更改模型。
这样做有很多变体,例如MVVM和MVP 。 值得一读 但原理与MVC相似,因此在此不再赘述。 这些都称为设计模式,它们使我们的代码模块化。
让我们看一下可以补充您选择使用的应用程序模式的另一种设计模式。
单身人士
单例是始终存在于内存中的类的单个实例。 那么,为什么我们要关心这个呢? 好吧,假设您正在构建一个连接到数据库的应用程序。 您需要放置所有数据服务连接的位置。 这将是使用单例的理想场所。 看下面的代码; 它将向您展示如何构造单例:
// Declaration
class DataService {
static var shared = DataService()
func createUser() {
}
}
// Call-site
DataService.shared.createUser()
如果您遵循这些简单的提示,则您的应用程序将更易于维护,并且在发现错误之前,您的客户会更容易发现它们。
结论
在本文中,我们看到了iOS应用程序开发人员犯的三个错误,这似乎使编码更容易,但从长远来看,实际上却花费了很多工作。
请记住,构建应用程序只是挑战的一部分-您还需要修复错误,添加功能以及与其他开发人员共享代码。 遵循使用常量,正确处理可选变量以及使用架构模式等最佳做法,将使您的应用程序更易于构建和维护。
翻译自: https://code.tutsplus.com/articles/three-terrible-mistakes-of-ios-developers--cms-29355