运算符重载是Swift编程语言的强大功能之一。 从本质上讲,它基本上是对任何您想要的类型使用-,+,==,/,*运算符。 另外,您可以定义自己的运算符,并在项目中使用它们。 多么酷啊?
假设您有一个新闻项目,并且正在处理一些文章:
结构文章{ 变量ID = 0 var title =“” var desc =“” init(id:Int,title:String,desc:String){ self.id = id self.title =标题 self.desc =说明 } }
让articleA = Article(id:1,标题:“ Title#1”,desc:“ Article description#1”) 让articleB = Article(id:2,标题:“ Title#2”,desc:“ Article description#2”) 让articleC = Article(id:2,标题:“ Title#2”,desc:“ Article description#3”)
现在,我们需要检查两个文章是否相同,但是逻辑是,只有id和title相同时,它们才是相同的。
可能,我们将使用if语句以老式的方式进行操作。
如果articleB.id == articleC.id && articleB.title == articleC.title { 打印(“文章相同”) }其他{ 打印(“文章不一样”) }
有人会说这段代码没有错。 它按预期工作。 是的,那是真的。 假设我们在此示例中添加了另一件事–假设我们向类中添加了date属性,并且我们的业务逻辑是,如果两个对象中的id,title和date属性相同,则表示它们相同。
您立即注意到的一件事是,我们的if条件根本不是很优雅。 这是巨大且不可持续的。 向其中添加更多内容-假设我们在几个地方都有这段代码。 可怕。 我们绝对会违反DRY原则,该原则代表不要重做 。
让我们做一个函数:
func compare(_ articleA:文章,与articleB:文章)-> Bool { 返回articleB.id == articleC.id && articleB.title == articleC.title && articleB.date == articleC.date }
是的,功能可以解决问题。 现在,我们可以在任何需要的地方使用此功能。 另外,如果我们的业务逻辑再次更改-我们将只在一个地方更改它。
该代码如下所示:
如果compare(articleB,with:articleC){ 打印(“文章相同”) }其他{ 打印(“文章不一样”) }
但是,在Swift中我们已经有一个比较运算符 ==运算符。 我们改用它不是很酷吗? 当然。
func ==(左:文章,右:文章)->布尔{ 返回left.id == right.id && left.title == right.title && left.date == right.date }
让我们看一下我们的最终代码:
如果articleB == articleC { 打印(“文章相同”) }其他{ 打印(“文章不一样”) }
现在我们有了一个优雅的解决方案。
在某些时候,我们都使用了那些沉重的if语句。 现在您已经看到了Swift运算符重载的强大功能,
希望您喜欢本教程。 祝你今天愉快!