美文网首页iOSswift学习iOS-【译】Programming iOS 9
Swift Review总结一:从 Swift Style 开始

Swift Review总结一:从 Swift Style 开始

作者: 没故事的卓同学 | 来源:发表于2016-12-01 00:35 被阅读1988次

    最近凑了几个热心的小伙伴写一些swift的新手demo(两周后应该能和大家见面了),我参与了review。于是借demo里的代码总结一下新手写swift要注意的问题,尤其是从oc转到用swift写的开发者。

    每个语言都有自己的推荐风格。显然oc与swift有着不同的风格。当我们开始写swift,首先要注意的就是按照swift的风格写,而不是沿用oc的风格。

    省略句末的分号

    swift推崇简洁的语法。如果一行里只有一句代码,句末不要写分号。

    // 💔
    title = "swift 3";
    
    // 😎
    title = "swift 3"
    

    省略self.

    不在闭包里的时候调用自身的属性或者方式时省略self.。这点社区也产生过讨论,有人建议需要强制的声明self.,但是苹果大声的拒绝了。所以让代码更简洁一点吧。

    // 💔
    self.title = "swift 3"
    
    // 😎
    title = "swift 3"
    

    注意类型标注的格式

    当我们给一个变量或者属性标注类型时的语法是这样的:

    var a: Type
    var dict: [String: Any]
    

    注意冒号后面有一个空格,如果是字典key的冒号后面有一个空格。
    冒号后面紧跟着类型是不规范的写法。

    // 💔
    var name:Sring
    var dict: [String:Any]
    var dict: [String : Any]
    

    当然你可以利用SwiftLint帮你检查。

    注意函数声明背后的空格

    一个标准的函数语法是这样的:

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    

    注意函数实现 { 前有一个空格

     // 💔
    class User{
        subscript(index: Int) -> T{
            return objects[index]
        }
    }
    
     // 😎
    class User {
        subscript(index: Int) -> T {
            return objects[index]
        }
    }
    

    二元操作符前后有空格

     // 💔
    var sum = 1+2
    // 😎
    var sum = 1 + 2
    
    // 注意函数返回类型 -> 符号的前后空格
     // 💔
    func greet(person: String, day: String)->String {
        return "Hello \(person), today is \(day)."
    }
     // 😎
    func greet(person: String, day: String) -> String {
        return "Hello \(person), today is \(day)."
    }
    

    闭包、函数实现不要写在一行里

        //  💔
        var joke : JokeItem? {
            didSet {
                if let _ = joke { updateUI() }
            }
        }
    
        // 😎
        var joke : JokeItem? {
            didSet {
                if let _ = joke {
                    updateUI()
                }
            }
        }
    

    对象初始化不要显式调用init

    通过()直接就是调用对象的初始化方法,不需要调用init

     //  💔
    let url = NSURL.init(string: "github.com")
    
    // 😎
    let url = NSURL(string: "github.com")
    

    函数命名

    oc的第一个参数名是省略的,所以会把第一个参数名带到方法名上。swift 3以后调整为在调用时第一个参数名会展示。所以函数命名时不要把第一个参数相关命名放在函数名上。

     //  💔
    func bindWith(data: String) {
    
    }
    
    // 😎
    func bind(withData: String) {
        
    }
    
    bind(withData: "swift")
    

    然而这里直接把介词去掉显得更加简洁:

    // 😎
    func bind(data: String) {
        
    }
    
    bind(data: "swift")
    

    欢迎关注我的微博:@没故事的卓同学


    相关链接:
    swift style guide

    相关文章

      网友评论

      • valentizx:小问题中能看出大问题。。。不过上面的错误我几乎没犯过哈哈哈哈 给自己个赞
        六阿哥:我犯了字典类型,习惯 [String : Any] 了,看来也得纠正下
        Wang66:@VaLenTi :clap:
      • 晨风说产品:非常好,正在一边学一边来做项目,正好要规范一下怎么去写,谢谢!
      • mysteryemm:给楼主做一个小补充,关于self关键字有种特殊情况,就是当一个实例方法的参数名字和该类的属性名字相同时,在方法内部访问属性需要使用self关键字……
        热干面一元五:产生歧义self , 闭包内self , 闭包循环引用self, 记住这三个个就好了,反正我目前就发现这三个地方会用到,当然,能不用就劲量不用
        六阿哥:这个都知道的额,楼主的意思是能不用self.就不用
      • 奉强:最后一个函数命名 感觉这样更加好点
        func bind(with data: String) {

        }
        没故事的卓同学:@奉强 我只是为了说明第一个参数相关命名不要放在函数名里,至于里面的具体命名可能不同的人对于api design guide有不同的理解。现在也是才刚刚开始3.0普及,可能过一段时间就会有统一的风格认知了。
        没故事的卓同学:@0924wyr 这个api是为了兼容oc的,可能也不太有说服力。
        0924wyr:@奉强
        ```
        optional public func collectionView(_ collectionView: UICollectionView, didEndDisplayingSupplementaryView view: UICollectionReusableView, forElementOfKind elementKind: String, at indexPath: IndexPath)
        ```
        仔细看下官方的api就知道为什么要withData 而不是 with data: String
        应该是bind(withData data: String)
      • 透头:哎呀,又更新了

      本文标题:Swift Review总结一:从 Swift Style 开始

      本文链接:https://www.haomeiwen.com/subject/mxtxmttx.html