欢迎来到天天文库
浏览记录
ID:6078624
大小:94.00 KB
页数:16页
时间:2018-01-02
《swift中17条最佳实践规范》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、这篇文章讲述的范围主要针对Swift语言以及Swift标准库。即便如此,如果能提出一个独特的Swift的视角和见解,我们依然会提供诸如Swift在MacOS、iOS、WatchOS以及TVOS上使用的特别建议。而如何在Xcode和LLDB上有效地使用Swift,这样的建议也会以Hints&tips的风格提供。 这是工作时的一系列笔记整理出来的。文中大多数建议是经过深思熟虑的,但仍可以有其他类似的解决方法。 这个最佳实践不是强加或者推荐Swift在程序、面向对象或者函数风格上的应用。更重要的是,这里要讲述的是务实的方法。如有需要的话,某些建议可能会集中
2、在面向对象或者实用的解决方法。 这个过程需要付出很多的努力,非常感谢为本文做出贡献的那些人。 此外,可以在[Swift-Langslack]里面讨论。 请先确保所有的示例是可以运行的(某些示例可能不是正确)。这个markdown能够转换成一个MacOSXplayground。 1.一般来说,Apple都是正确的,遵循Apple喜欢的或者示范的处理方式。在任何情况下,你都应该遵循Apple的代码风格,正如他们TheSwiftProgrammingLanguage"这本书里面的定义一样。然而Apple是个大公司,我们将会看到很多在示例代码中的差异。
3、 2.永远不要仅仅为了减少代码量而去写代码。尽量依赖Xcode中的自动补全代码,自动建议,复制和粘贴。详尽的代码描述风格对其他代码维护者来说是非常有好处的。即便如此,过度的冗余也会失去Swift的重要特性:类型推断。 1.命名 正如SwiftProgrammingLanguage中的类型名称都是以大驼峰命名法命名的(例如:VehicleController)。 变量和常量则以小驼峰命名法命名(例如:vehicleName)。 你应该使用Swift模板去命名你的代码而不是使用Objective-C类前缀的风格(除非和Objective-C接连)。
4、 不要使用任何匈牙利标识法(Hungariannotation)命名(例如:k为常量,m为方法),应使用简短的命名并且使用Xcode的类型QuickHelp(01.png+click)去查明变量的类型。同样地,不要使用小写字母+下划线(SNAKE_CASE)的命名方式。 唯一比较特别的是enum值的命名,这里需要使用大驼峰命名法(这个也是遵循Apple的SwiftProgrammingLanguage风格): 1 2 3 enumPlanet{ caseMercury,Venus,Earth,Mars,Jupiter,Saturn,Uranu
5、s,Neptune } 在所有可能的情况里,名称的不必要减少和缩写都应该避免,将来你应该能在没有任何损害和依赖Xcode的自动补全功能的情况下,确切地指出类型特征"ViewController"。非常普遍的缩写如URL是允许的。缩写应该用所有字母大写(URL)或者所有字母小写(url)表示。对类型和变量使用相同的规则。如果url是个类型,则应该为大写,如果是个变量,则应该为小写。 2.注释 注释不应该用来使代码无效,注释代码会使代码无效且影响代码的整洁。如果你想要移除代码,但是仍想保留以防代码在以后会用到,你应该依赖git或者bugtracker
6、。 3.类型推断 在可能的地方,使用Swift的类型推断以减少多余的类型信息。例如,正确的写法: 1 varcurrentLocation=Location() 而不是: 1 varcurrentLocation:Location=Location() 4.Self推断 让编译器在所有允许的地方推断self。在init中设置参数以及non-escapingclosures中应该显性地使用self。例如: 1 2 3 4 5 6 7 structExample{ letname:String init(name:Str
7、ing){ self.name=name } } 5.参数列表类型推断 在一个闭包表达式(closureexpression)中指定参数类型可能导致代码更加冗长。只有当需要指定类型时。 1 2 3 4 5 6 7 8 9 10 letpeople=[ ("Mary",42), ("Susan",27), ("Charlie",18), ] letstrings=people.map(){ (name:String,age:Int)->Stringin return"(name)is(age)yearsol
8、d" } 如果编译器能够推断类型,则应该去掉类型定义。 1 2 3
此文档下载收益归作者所有