Swift编程风格指南
语言使用美式英语拼写以匹配苹果公司的API 优选: var color = "red"
不建议使用: colour"red"
间隔
ifuser.isHappy { //Do something } else//Do something else} }
注释
命名使用驼峰法为类、方法、变量等等取一个描述性强的名字。模块范围的类名以及常量名称要以大写字母开头,而方法名跟变量名则应该以小写字母开头。 let MaximumWidgetCount 100 class WidgetContainer widgetButton: UIButton widgetHeightPercentage 0.85MAX_WIDGET_COUNTapp_widgetContainerwButwHeightPct 对于普通函数以及构造函数名称,除非上下文含义非常清楚,对所有的参数都加以命名是更为推荐的做法。如果外部参数名称可以使得函数调用更具有可读性,那么请带上它。 funcdateFromString(dateStringNSString)->NSDate
convertPointAt(#column: Int, row) -> CGPointtimedActiondelayNSTimeIntervalperform actionSKActionSKAction!
// 会被这样调用
("2014-03-14"column42row13delay1.0performsomeOtherAction)
对于方法,遵循苹果公司的命名标准,在方法名中提及第一个参数: GuidelinecombineWithStringincoming Stringoptions Dictionary?...upvoteByamount Int 在所有提及到函数的内容中(包括教程,书以及评论),请从调用者的视角进行考虑,将所有的必要参数名都包含进来:
dateFromString()函数真是太棒了。 在你的init()方法中调用convertPointAt(column:, row:)。 timedActiondelay perform:)的返回值可能为nil。 Guideline对象只有两个方法:combineWithStringoptions:)跟upvoteBy()。你不应该直接调用数据源方法tableViewcellForRowAtIndexPath:)。 类前缀Swift中的类型会自动加入包含它们的模块的命名空间。所以即使是为了最小化命名冲突的可能性,前缀也是不必要的。如果来自于不同模块的两个名称冲突了,可以通过在名称前面加上模块名以消除歧义: import MyModulemyClass MyModule.MyClass()
不应该在自己创建的类型上加前缀。 如果需要将Swift类型暴露在Objective-C环境中使用,请按照以下方式提供合适的前缀(前缀的命名请参考Objective-C风格指南): @objc(RWTChicken Chicken
}
分号Swift中,每条语句后的分号都不是必需的。只有在一行中有多条语句时才需要添加上分号。 请不要在一行中写上用分号隔开的多条语句。 这条规则的唯一例外就是 swift "not a scripting language""not a scripting language"; 请注意:Swift与JavaScript不同,在后者中省略分号通常是不安全的。 类与结构体下面的代码是一个很有标准范儿的类定义,请参考: Circle Shapexy Intradius Doublediameter
get
returnradius*2
set
newValue/
init Double
selfxy
convenience .diameter2describe() String
"I am a circle at ((x),(y)) with an area of (computeArea())"computeAreaM_PI
上面的例子阐述了这么几个风格上的准则:
Self 考虑到在Swift中访问一个对象的属性或者调用它的方法并不需要使用 需要使用 BoardLocationrowcolumn 函数声明
保持函数声明短小精悍,尽量在一行中完成声明,同时还包含了开括号: reticulateSplinesspline[]) Bool// reticulate code goes here 对于有着长长的参数的函数,请在适当的位置进行断行且对后续行缩进一级:
[],76)">adjustmentFactor
translateConstantcomment 闭包
尽可能地使用尾闭包语法。在所有的情况下都需要给闭包参数一个描述性强的名称: SKActioncustomActionWithDuration(effectdurationnodeelapsedTimein
// more code goes here 对于上下文清晰的单表达式闭包,使用隐式的返回值:
attendeeListsortab
a> 类型
尽可能地使用Swift原生类型。Swift提供了对Objective-C的桥接所以在需要的时候仍然可以使用全部的Objective-C方法: width 120.0 //DoublewidthStringwidthbridgeToObjectiveC().stringValue //StringNSNumber //NSNumberwidthStringNSString //NSString 在Sprite Kit的代码中,如果 常量 常量通过 Tip:有一个方法可以帮你符合该项规则,将所有值都定义成常量,然后编译器提示的时候将其改为变量。 Optionals 在nil值可能出现的情况下,将变量跟函数返回值的类型通过 只有在确定实例变量会在初始化之后才被使用的情况下,通过 在访问一个Optional值时,如果该值只被访问一次,或者之后需要连续访问多个Optional值,请使用链式Optional语法: myOptionalanotherOneoptionalViewsetNeedsDisplay 对于需要将Optional值解开一次,然后进行多个操作的情况,使用Optional绑定更为方便:
view optionalView// do many things with view}
类型推断Swift的编译器可以推断出变量跟常量的类型。可以通过类型别名(在冒号后面指出其类型)提供显式类型,不过大多数情况下这都是不必要的。 保持代码紧凑,然后让编译器推断变量跟常量的类型。 message "Click the button"currentBoundscomputeViewBoundsmessagecurrentBoundsCGRect 注意:遵循这条准则意味着描述性强的名称比之前更为重要了。 控制流 对于 for _0..5println"Hello five times"personattendeeList// do somethingi0;<5i++count[i] 笑脸 笑脸对于raywenderlich.com来说是一个格外重要的风格特征。使用正确的笑脸可以表示出对某个主题的无穷尽的高兴以及兴奋程度。选用了 优选: :]
不建议使用: :) 本文版权归 raywenderlich.com 、The Official raywenderlich.com Swift Style Guide项目以及所有贡献者所有。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |