Objective-C已经存在几年了。在此期间,开发者遵循了各种代码风格,希望提高可读性,为以后的版本迭代做准备。但斯威夫特不同。Swift仍然是一种非常新的语言,没有单一或最广泛的编码风格可供遵循。所以很多时候需要我们自己去探索。幸运的是,在我最近一年的工作中,Swift占到了98.2%。在这段时间里,我学到了很多很棒的编码风格,今天我将分享这些风格。选择器在Swift2.2之前,选择器需要传入字符串,并且没有自动补全功能。手写确实容易出错。letbutton=UIButton(type:.System)button.addTarget(self,action:Selector(“buttonTapped:”),forControlEvents:.TouchUpInside)...funcbuttonTapped(sender:UIButton){}好的事件函数命名方式:对象名称用作前缀,动作用作后缀。例如,按钮(button)的点击(tapped)事件被命名为buttonTapped:。另外,确保每次都将正确的类型参数传递给发送者。即使你不需要这个参数,你也必须传入它,以备不时之需。以下是我推荐的事件函数命名:funcsegmentedControlValueChanged(sender:UISegmentedControl){}funcbarButtonItemTapped(sender:UIBarButtonItem){}funckeyboardWillShowNotification(notification:NSNotification){}Swift2.2中的优化在Swift2.2中,选择器写得更安全,但还是很丑。此外,代码片段会散落在整个项目中,使项目变得杂乱无章。如果您使用MVC(MassiveViewController:smile:)怎么办?如果同一个选择器会被多次使用怎么办?button.addTarget(self,action:#selector(ViewController.buttonTapped(_:)),forControlEvents:.TouchUpInside)浏览代码时,上面的代码太长,可读性差。想象一下您将在很多地方使用它(复制粘贴...)。让我们把这些选择器整合起来,这样在需要的时候就可以直接引用它们,并且可以在同一个地方进行修改。privatestructAction{staticletbuttonTapped=#selector(ViewController.buttonTapped(_:))}...button.addTarget(self,action:Action.buttonTapped,forControlEvents:.TouchUpInside)很棒。现在我们可以在一个地方定义这些选择器。任何想要使用选择器的对象都可以直接从Action结构中获取静态常量。我们必须将此结构命名为Action,因为更好的名称Selector已被Selector取用。另一个明智的做法是让静态常量和方法名保持一致,这样既容易记忆又风格统一。下面的结构声明为private,防止Xcode报声明冲突错误。这个结构只能在当前的.swift文件中使用。我已经这样写了几个月了,从来没有遇到过问题。但是今天早上突然发现这个模型可以优化,更加优雅。既然可以使用Selector扩展,为什么还要使用Action结构呢?私有扩展选择器{staticletbuttonTapped=#selector(ViewController.buttonTapped(_:))}...button.addTarget(self,action:.buttonTapped,forControlEvents:.TouchUpInside)***!我们为Selector添加了一个扩展,其中包含我们要调用的选择器的静态常量。这也利用了Swift的类型推断。action:对象的参数需要Selector类型,而我们使用Selector的属性,所以Selector.前缀可以省略(前面的Action必须写成Action.buttonTapped:)。就像当你想为视图设置颜色时,省略UIColor。相同:view.backgroundColor=.blackColor()
