Swift51.com
麦子学院 头像
麦子学院  2016-09-19 23:25

Swift语言开发中超有用的几个技巧

回复:0  查看:2364  

不管是做什么事情,如果能掌握一些技巧总是好的,而且有些技巧往往能使我们达到事半功倍的效果,今天和大家分享的就是世界级超级swift大牛整理的一些,关于swift语言开发的一些超实用技巧,一起来看看吧。

  在本文中,来自objc.ioLinkedIn等各个公司的软件工程师及资深开发者总结了自己在接触Swift过程中最喜爱的贴士与技巧,有些技巧即使是很早就入坑Swift的开发者都不知道,不妨一起来了解一下吧。

  Natasha Murashev——Capital One iOS工程师、Natasha The Robot博主

  当我在构建iOS应用时,Swift能够允许更多的函数式编程方法,所以,为了能在改善Swift代码时做出更好的决策,我一直在学习函数式编程。迄今为止,我最喜欢的函数方面的Swift资源有:

  功能型函数——能轻松更改函数,让代码更独立、可测试。

  包装类型——我喜欢用可读且安全的类型别名来编写代码。

  类型设计——在设计程序时大幅使用正确的类型,有利于编译器调试。

  Swift中柯里化函数的运用——Haskell中,某种类型的函数指针只能指向特定参数类型和数目以及返回值类型的函数,而Swift则允许“currying”或部分应用函数,从而实现代码块可重复使用。

  Swift奇妙的差错处理——Objective-C相比,我特别喜欢这种简单、可读性强而又安全的错误处理方式。

  面向对象编程直达车——它为在代码中进行错误处理提供了一种最快捷的方式,于程序猿而言,最幸福之事莫过于此。

  Swift函数式编程——这是一本关于Swift函数比较深度的书籍,我每次重新读过时都会发现不一样的点,非常适合想要深入研究Swift函数以及如何将其运用到iOS代码中的开发者们阅读。

  Chris Eidhof——objc.io创始人、《Swift函数式编程》作者

  快速排序(Quicksort——Swift中的快速排序实现可以说是前无古人后无来者,大多数Quicksort实现都需使用固定的内存,而Swift则能以最简洁清晰的程序实现快排:

  func qsort(input: [Int]) -> [Int] {

  if let (pivot, rest) = input.decompose {

  let lesser = rest.filter { $0 < pivot }

  let greater = rest.filter { $0 >= pivot }

  return qsort(lesser) + [pivot] + qsort(greater)

  } else {

  return []

  }

  }

  Austin Zheng——LinkedIn高级软件工程师

  我认为,精妙的Swift技巧应当如此:开发者可以通过创建一个已定义标准类的闭包来为匿名类实例设置委托,而闭包则将返回该类的一个新实例,并运行。示例代码如下:

  import Foundation

  protocol SomeDelegateProtocol : class {

  func firstFunc() -> String

  func secondFunc() -> Bool

  }

  class MyClass {

  weak var delegate : SomeDelegateProtocol?

  }

  class Parent {

  var child : MyClass

  var strongDelegate : SomeDelegateProtocol? = nil

  func setup() {

  strongDelegate = {

  // [self] // Original version had this not commented; it's commented to let people know it was a typo

  class SomethingClass : SomeDelegateProtocol {

  func firstFunc() -> String { return "foo" }

  func secondFunc() -> Bool { return true }

  }

  return SomethingClass()

  }()

  child.delegate = strongDelegate

  }

  init() {

  self.child = MyClass()

  self.setup()

  }

  }

  var bleh = Parent()

  var result = bleh.child.delegate?.firstFunc()

  println("Got \(result!)")

  Clay Smith——PagerDuty高级软件工程师

  文章来源:极客头条