自认为成为 Swift 开发人员要学习的技巧1

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战」。

在经常有人跟我说会oc去写swift很简单,但是在我不断的学习过程中发现实际情况并不是那样,如果真的那样去写只是写了“OC”式的swift,而不是应用到了真正的swift技巧。我个人认为应该有这些技巧,而且技巧会在不停的更新换代中,下面记录下自己的实际使用的一些技巧:

在单个文件中管理一些全局的常量:

在我们要管理项目的时候需要创建一些全局通用的常量,这个时候应该创建一个文件并仅在此处管理所有常量。

enum AppConstants {
   static let AppName = "AppName"
   static let AppVersion = "1.0.0"
   ...
}
复制代码

多层使用guard let,而不是if let嵌套下去

用if的例子,可以看到不停的在嵌套下去,如果if层级少了还好,如果多了过段时间下面条理会乱,会又重头来梳理一遍。

let a:String? = ""

   let b:String? = ""

   if let tempa = a {
      if let tempb = b {
         print(tempa,tempb)
      }
   }
复制代码

而使用guard let会是字面清晰,多个也只是不断的guard let 下去。。条理永远清晰。

    let a:String? = ""
    let b:String? = ""
    
    guard let tempa = a else { return  }
    guard let tempb = b else { return  }
    ...
    print(tempa,tempb)
复制代码

巧用where关键词

一般以前我们的写法是:

if let path = webUrl {
   if path.hasPrefix("https") {
      //...
   }
}
复制代码

而使用where关键词

if let path = webUrl, path.hasPrefix("https") {
   // 做好事
}
复制代码

where 更有用可用于检查关联类型是否必须确认落在 where 关键字之后的某个协议,在后面的关键词系列会详情介绍where。这里的,就是where

weak 自定义委托:

这样可以防止循环引用。

protocol P1 : AnyObject {}

class Class1 {
    weak var delegate : P1?
}
复制代码

多用扩展进行细分

很明显的利用扩展进行细分就是UITableView。

extension UITableView: UITableViewDataSource{
    ...
}

extension UITableView: UITableViewDelegate {
    ....
}
复制代码

巧用泛型

很好合理的去使用泛型让我们不少重复的代码。泛型允许您声明一个变量,该变量在执行时可以分配给我们定义的一组类型。

func printObjc<T> (_ obj: T, message: String = "") { 
     print("\(message)\(obj)") 
}
复制代码

省略使用KVO

KVO(Key Value Observer),当该键的值发生变化时,您可以在其中设置和观察任何键和动作。这是 swift 的好方法,但不是更好的方法。在 swift 中有一个 KVO 的替代品,即property observer. 我们使用它可以在属性的值将要更改时获取操作。willSet 在存储值之前调用,didSet 在存储新值后立即调用。

class Class1 {
      var num: Int = 0 {
      willSet(newValue) {
         print("newValue = \(newValue), oldValue = \(num)")
      }
      
      didSet {
         print("oldValue = \(oldValue), currentValue = \( num)")
      }
   }
}
复制代码

合理使用defer

defer是一个块,意思是一些想稍后执行的指令。它可以包含一行代码或一堆代码行。我们可以在函数中定义一个 defer 块,它会在函数执行结束时被调用。同时也减少了代码冗余。

func checkdefer() {

        defer {
           print("1")
        }

        print("2")
    }
复制代码

使用defer能让您保证在函数执行完成之前必须会进行的一些操作(如资源释放。内存释放)。

合理使用嵌套函数

您可以使用其他函数的体定义一个函数,称为嵌套函数。嵌套函数将对外界隐藏,但可以被其封闭函数调用和使用。封闭函数还可以返回其嵌套函数,以便可以在外部世界或其他范围内使用,我认为合理的它将提高代码的可读性和可重用性,但是无限的套娃下去也是头疼。

func chooseStepFunction(backwards: Bool) -> (Int) -> Int {
    func stepForward(input: Int) -> Int { return input + 1 }
    func stepBackward(input: Int) -> Int { return input - 1 }
    return backwards ? stepBackward : stepForward
}
复制代码

多使用 Playground进行一些简单的测试

Playground 是一个非常简单和交互式的 swift 工具。当要测试一些逻辑代码的测试可以在Playground上对其进行验证,同时也可用于在Playground进行学习。 关于 playground 一些基本的介绍可以查看官方的帮助文档

猜你喜欢

转载自juejin.im/post/7032308416265584648