精简 Swift 代码的 12 个技巧

Swift的语法非常好,从这篇译自normi的同名文章就能看出来。

精简 Swift 代码的 12 个技巧

❌  不推荐的写法
✅  推荐的写法

使用块定义

❌
func doSome(result: (Bool) -> ()) {}

✅
typealias BoolBlock = (Bool) -> ()
/// ....
func doSome(result: BoolBlock) {}

使用参数的默认值

func logSome(_ msg: String, detail: String = "default detail") {}
logSome("this is msg")

用guard让判断早归

❌
func doSome(info: Info) {
  if let name = info.name {
    doOther(name: name)
  }
}

✅
func doSome(info: Info) {
  guard let name = info.name else {
        return
  }
  doOther(name: name)
}

省略self、init

❌
public override func viewDidLoad() {
  super.viewDidLoad()
  self.view.backgroundColor = .blue
  let testView = UIView.init()
  self.view.addSubview(testView)
}

✅
public override func viewDidLoad() {
  super.viewDidLoad()
  view.backgroundColor = .blue
  let testView = UIView()
  view.addSubview(testView)
}

使用``来定义方法或属性

✅
enum Style {
  case cancel
  case `default`
}
class LogProvider {
  static let `default` = LogProvider()
}

使用 ?? 返回默认值

✅
func doSome(info: Info) {
  let name = info.name ?? "default name"
}

使用三元表达式

❌
var text: String?
if isMe {
		text = "Me"
} else {
  text = "other"
}

✅
let text = isMe ? "Me" : "other"

省略类型

❌
view.backgroundColor = UIColor.blue
✅
view.backgroundColor = .blue

使用扩展进行分类

❌
class LoginVC: UIViewController, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate  {
}

✅
class LoginVC: UIViewController {
  /// …
}
extension LoginVC: UITextFieldDelegate {
  /// …
}
extension LoginVC: UITableViewDataSource, UITableViewDelegate {
  /// …
}

强制解包和转换

❌
let name = info.name!

✅
guard let name = info.name else {
  print("name is nil")
  return
}

使用速记名称类型

❌
var items = Array()
var map = Dictionary()
func doSome() -> Void
let callback: () -> Void

✅
var items = [String]()
var map = [String : String]()
func doSome()
let callback: () -> ()

避免使用标记值

❌
func doSome() -> Int {}
let index = doSome()
if index == -1 {
  /// fail
} else {
  /// success
}

✅
func doSome() -> Int? {}
guard let index = doSome() else {
  print("fail")
  return
}
/// success
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章